TBB和其他库中的线程池模式

时间:2012-05-14 15:57:01

标签: c++ multithreading tbb

thread pool pattern中是否有TBB library实现?

如果不是,我在哪里可以找到它?我发现的大多数开源实现看起来都是未完成和不稳定的。

2 个答案:

答案 0 :(得分:2)

TBB不包含您可以获得的任何类型的线程池类(但请参见下文)。如果我真的需要自己创建一个线程池(我希望我不会,因为我宁愿处理更高级别的概念TBB或OpenMP暴露),那么我可能会选择这个可爱的{ {3}}

有关TBB的更多信息:如果TBB包含一个线程池,那么它就是一个内部实现细节,当你调用{{1}时,通过选择性地指定一定数量的线程(及其堆栈大小),你可以对它进行一些有限的控制。 }。但是完全有可能不会调用它并让TBB使用它的默认值。

事实上,请注意文档说明:

  

构造函数和方法初始化的可选参数允许您指定   用于任务执行的线程数。此参数非常有用   在开发过程中进行缩放研究,但不应将其设置为生产用途。   不指定生产代码中的线程数的原因是在a中   大型软件项目,没有办法让各个组件知道多少   线程对于其他线程是最佳的。硬件线程是共享的全局   资源。最好留下用于任务的线程数量的决定   调度器。

但是如果你担心线程池,或者使用TBB对显式线程对象实现的支持,那么你将错过TBB中的大部分值。要利用它,你真的需要考虑任务和任务并行性,而不是线程。

答案 1 :(得分:0)

简答:没有

答案很长:

TBB线程类只是近似于C ++ 11线程的底层OS线程的包装器。但它对代码可移植性很有用。

我同意一般的建议,即您可能更愿意依赖TBB提供的高度优化的任务计划。

或者考虑新添加的flow_graph结构。

如果你想自己探索线程,那么滚动你自己的线程组类开始停止并加入它所有包含的线程是相对简单的没有?