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

C++ TBB和其他库中的线程池模式,c++,multithreading,tbb,C++,Multithreading,Tbb,这方面有什么认识吗 如果没有,我在哪里可以找到它?我已经发现的大多数开源实现看起来都是未完成和不稳定的。TBB不包含任何类型的线程池类(请参见下文)。如果我真的需要自己创建线程池(我希望我不会,因为我更愿意处理更高级别的概念TBB或OpenMP expose),那么我可能会选择这个可爱的 特别是关于TBB的更多信息:如果TBB包含一个线程池,那么它是一个内部实现细节,当您调用task\u scheduler\u init时,您可以选择指定特定数量的线程(及其堆栈大小),从而对其进行有限的控制。但

这方面有什么认识吗


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

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

特别是关于TBB的更多信息:如果TBB包含一个线程池,那么它是一个内部实现细节,当您调用
task\u scheduler\u init
时,您可以选择指定特定数量的线程(及其堆栈大小),从而对其进行有限的控制。但是完全可以不调用它,让TBB使用它的默认值

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

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

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

简短回答:不

长答覆:

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

我同意一般的建议,即您最好依赖TBB提供的高度优化的任务调度

或考虑新添加的流图结构。


如果您想自己探索线程,那么滚动您自己的threadgroup类(该类启动、停止并连接其包含的所有线程)是相对简单的。否?

能否详细说明您的应用程序正在解决的任务?TBB不公开它的线程池API,但它有算法、任务组、任务组、管道,甚至一个非线性管道(据我所知),所以也许你根本不需要线程池,也许有一种方法可以将您的应用程序算法映射到TBB公开的API上?我注意到最近的TBB现在包括一个task_arena类,它允许您将TBB的隐式线程池中的一些片段分割成单独的。。。他们不是真正的游泳池,因此竞技场的名字。但它们确实允许您将作业限制为一定数量的工作线程。