【发布时间】:2020-12-21 14:13:20
【问题描述】:
对于基于 Linux 的应用程序的高 CPU 吞吐量(阅读:大量浮点运算),有哪些权衡 b/w boost::thread、std::thread (C++11) 和 pthread?什么时候应该使用一种实现而不是其他实现?
这里的用例是在连续内存的缓冲区(或指向缓冲区的指针)上调用例程,做一些工作,然后在多线程实现中返回。
【问题讨论】:
-
我想说,这三个之间应该没有明显的区别(如果我是对的,std::thread 来自 boost::thread)。前两个也依赖于支持 pthread 的平台上的 pthread。 pthread 可能具有优势的唯一情况是使用 std/boost::thread 不支持的某些 pthread 特定功能。
-
除非您不断创建大量线程并大量使用同步原语,否则不会有性能差异。浮点性能不受线程 API 的影响。
std::thread的优点是在标准库中并且可移植,boost::thread有一些额外的功能,而pthread仅在 POSIX 上可用。 -
对于
lots of floating point operations,最好使用omp、eigen、OpenCV、OpenCL之类的替代方案,具体取决于应用程序。例如,使用OpenCL,您可以将并行操作移至当前具有大量浮点功能(比 CPU 更多)的显卡。 -
太多人认为线程是“对抗性”术语,例如单独的进程,而不是协作术语。取消之类的概念是一个错误,
std::thread避免了。分离的线程是另一个错误。这两者都使得确定性执行和资源展开 (RAII) 变得非常困难。如果可用的话,我想不出不使用 C++ 标准线程工具的充分理由。
标签: c++ multithreading c++11 pthreads boost-thread