2017-03-04 43 views
2

如果我向线程池提交了一个工作并且线程已经在boost中工作,会发生什么?如果我将工作发布到线程池并且线程已在boost工作,会发生什么情况?

我看过这个话题(How to create a thread pool using boost in C++?),它解释了如何创建一个池。

我也是这个话题(https://stackoverflow.com/a/12267138/7108553)中发现的

,如果我分配工作给游泳池和所有线程都那么努力 作业被放弃。

我的问题是,是这样的情况下,如果我创建一个类似于这样的池(How to create a thread pool using boost in C++?)?
我的理解是,如果我将作业分配给池并且所有线程都已经工作,那么这将由库在内部处理,并且一旦线程完成,那么作业被分配给它..这是正确的吗?

如果没有,是否有一种有效的方式来跟踪自由和占用的线程?

+0

这取决于线程池的设计。您必须阅读您选择使用的实施的文档。排队添加工作是最常见的方法,但我可以看到在所有线程都在使用时丢弃的线程池的用法。 –

+0

其实我做了,但在那个特定点上并不清楚。 – user7631183

回答

1

在这两个链接中,答案都使用ASIO,后者发布到io_service上,这会将工作排入队列,直到有空闲线程运行为止。

如果工作增加超出可用线程的数量,则可以将更多线程与IO服务关联。显然总有一个收益递减点。

相关问题