【发布时间】:2011-10-31 02:18:30
【问题描述】:
在我的新应用程序中,我可以灵活地决定将库用于多线程。到目前为止,我使用的是 pthread。现在想探索跨平台库。我在 TBB 和 Boost 上归零。我不明白 TBB 比 Boost 有什么好处。 我试图找出 TBB 相对于 Boost 的优势: TBB Excerpts for wiki “相反,该库通过允许将操作视为“任务”来抽象对多个处理器的访问,这些操作由库的运行时引擎动态分配给各个内核,并通过自动有效地使用缓存。 TBB 程序根据算法创建、同步和销毁相关任务的图,”
但是线程库甚至需要担心线程分配给内核。这不是操作系统的工作吗? 那么使用 TBB 而不是 Boost 的真正好处是什么?
【问题讨论】:
-
您也可以使用 pthread 设置线程亲和性(例如使用 pthread_setaffinity_np 调用)
-
@Foo 是的,没错。我的观点是这样做有多少实际用途。作为程序员,您可能不希望在您的应用程序中完成线程调度任务。那么为什么 TBB 将其显示为与其他库的区别呢?
-
为应用程序正确选择内核具有明显的优势。以线程记录器的简单示例为例。一个线程从网络接口接收数据并将其放在环上;另一个线程从环中读取并写入文件(这有助于缓解使用 tcpdump 时看到的拥塞)。在这种情况下,在双处理器系统上,在同一个 CPU 上设置亲和性明显更有效。如果您启用了超线程,则使用虚拟核心对会快得多。但是,这需要大量的微观管理,而 TBB 不需要。
-
@Foo 感谢您的精彩解释。我同意在某些情况下您想要设置线程的亲和力。但是 TBB 将如何代表您(程序员)进行这种管理?换句话说,程序员必须直接TBB。在 boost/pthread 上也可以这样做!更大的问题是,当 TBB 比操作系统做更好的线程调度时,什么情况下?
-
@Foo.即使您使用 pthread_setaffinity_np() 正确设置线程的亲和性,也不能保证线程将以交错方式运行,尤其是在多道程序环境中。我仍然会说它可以给您一些好处,但有一个上限.
标签: boost boost-thread tbb