tbb :: task_group:应用程序使用的线程数在tbb:task_group对象被破坏后不会失效

时间:2016-01-13 16:47:38

标签: multithreading tbb

我创建了一个tbb :: task_group并为其添加了多个任务。最后我在wait()上完成任务。我正在分析代码并发现我的应用程序使用的线程数量增加了(在Window的任务管理器中可见)。但是,当tbb :: task_group对象被破坏时,线程数不会减少。

此外,如果我再次调用相同的代码块(不重新启动应用程序),则线程数有时会增加,有时不会增加。

这是预期的行为吗?如果是,我如何确保先前创建的线程被重用?

1 个答案:

答案 0 :(得分:1)

是的,这是预期的行为。它专门用于在并行算法之间重用线程。您可以通过使用线程局部变量(TBB提供combinable类)标记线程或查看task_scheduler_observer的回调来验证它。

TBB始终但懒得创建初始化时指定的线程数 - 即使您只运行单个任务。默认情况下,TBB工作线程的数量等于应用程序线程的HW线程数(核心* HT)减去一个。

顺便说一句,我建议您不要使用适用于高级案例的tbb::task,请先查看tbb::parallel_invoketbb::task_group哪些是任务的高级接口。或者甚至更好,看看您的算法是否可以使用parallel_forparallel_reduce(可能包含自定义范围),parallel_pipelineflow::graph等内容在更高级别上表达