2

TBB库中是否有线程池模式实现?

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

4

2 回答 2

2

TBB 不包含您可以自己获得的任何类型的线程池类(但请参见下文)。如果我真的需要自己创建一个线程池(我希望我不会,因为我宁愿处理更高级别的概念 TBB 或 OpenMP 公开),那么我可能会采用这种可爱的方式用于boost::asio提供线程池功能

关于 TBB 的更多信息:如果 TBB 包含一个线程池,那么它是一个内部实现细节,您可以通过在调用task_scheduler_init. 但是完全有可能不调用它并让 TBB 使用它的默认值。

事实上请注意,文档状态:

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

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

于 2012-05-15T19:49:35.877 回答
0

简短的回答:没有

长答案:

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

我同意一般建议,您可能会更好地依赖 TBB 提供的高度优化的任务调度。

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

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

于 2012-05-24T17:55:38.970 回答