【问题标题】:What happens if I posted a work to thread pool and the threads are already working in boost?如果我将工作发布到线程池并且线程已经在 boost 中工作,会发生什么?
【发布时间】:2017-07-24 20:15:05
【问题描述】:

如果我向线程池提交了一个工作并且线程已经在 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++?),是否会出现这种情况?
我的理解是,如果我将作业分配给池并且所有线程都已经在工作,那么这将由库在内部处理,一旦线程完成,作业就会分配给它..这是正确的吗?

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

【问题讨论】:

  • 取决于线程池的设计。您必须阅读您选择使用的实现的文档。排队添加工作是最常见的方法,但我可以看到线程池的用途,该线程池在所有线程都在使用时丢弃..
  • 其实我做了,但具体点不清楚。

标签: c++ multithreading c++11 boost


【解决方案1】:

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

如果工作增加超过可用线程的数量,您可以将更多线程与 IO 服务关联。显然,收益递减点总是存在的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2018-01-20
    相关资源
    最近更新 更多