【发布时间】:2011-10-22 13:06:30
【问题描述】:
假设我使用pthreads 创建线程,是否可以在初始化之后向它们发送新的工作,这样我就不会在创建新线程时浪费资源?例如,我创建了 3 个线程,线程 2 表示完成,然后我向它发送另一个“任务”而不杀死它并开始一个新的。谢谢。
【问题讨论】:
假设我使用pthreads 创建线程,是否可以在初始化之后向它们发送新的工作,这样我就不会在创建新线程时浪费资源?例如,我创建了 3 个线程,线程 2 表示完成,然后我向它发送另一个“任务”而不杀死它并开始一个新的。谢谢。
【问题讨论】:
通常的、简单的形式是普通的(工作)queue。原则上,您维护一个队列结构,可能是一个链表,受互斥体保护。通常,主/生产者线程使用condition variables 通知工作线程有新工作可用,因此它们不必轮询。
之前的一些可能也有用的 SO 问题是:
【讨论】:
是的,这就是像 Apache 这样的服务器为提高性能所做的事情。该设计模式称为Thread pool pattern,并且有多种使用pthreads的实现(例如this one)。
当然,您可能希望实现尽可能简单,具体取决于您的目标。
【讨论】:
当然。例如,您可以使用生产者-消费者模式。这是一个example in C#,但它也可以在 pthreads 中轻松实现。
【讨论】:
您问题的搜索关键字是“线程池”或“线程池”。使用这些术语,您会在本网站和 Google 中找到大量信息。
【讨论】: