如果我对线程池进行工作并且线程已经在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++?),会是这种情况吗?我的理解是,如果我向池分配了一个作业,并且所有线程都已经在工作,那么这将由库在内部进行处理,一旦线程完成,便将作业分配给了它。
如果没有,是否有一种有效的方法来跟踪空闲线程和占用线程?
最佳答案
在这两个链接中,答案都使用ASIO,它会发布到io_service上,这将使工作排队,直到有空闲线程来运行它为止。
如果工作量超出可用线程数,则可以将更多线程与IO服务关联。显然总会有 yield 递减的现象。