如果我将一个工作发布到线程池并且线程已经在boost中工作会发生什么?

时间:2017-03-04 19:45:59

标签: c++ multithreading c++11 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++?),情况就是这样吗?我的理解是,如果我将一个作业分配给一个池并且所有线程都已经在工作,那么这将由内部库处理,一旦一个线程完成,就会将作业分配给它..这是正确的吗?

如果没有,是否有一种有效的方法来跟踪免费和占用的线程?

1 个答案:

答案 0 :(得分:1)

在这两个链接中,答案都使用ASIO,后者将发布到io_service,它会将工作排入队列,直到有一个免费线程来运行它。

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