如果我将一个工作提交给线程池并且线程已经在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 :(得分:1)
在这两个链接中,答案都使用ASIO,后者将发布到io_service,它会将工作排入队列,直到有一个免费线程来运行它。
如果工作量超过可用线程数,则可以将更多线程与IO服务相关联。显然,总有一个收益递减点。