【发布时间】:2014-08-13 02:08:31
【问题描述】:
我正在使用 MinGW_W64,我无法决定如何使用“线程”选项继续前进。我可以使用 posix 线程或 win32 线程。到目前为止,我一直在使用 C++11 的“std::thread”进行线程处理(这需要 posix 线程选项),我真的很喜欢接口以这种方式做事。但是,我从多个来源了解到 posix 线程比 win32 线程慢得多,而性能对我来说是一个大问题。
我的项目最终将是多平台的,但目前我的主要开发机器运行的是 Windows 7。
我的问题是:MinGW_W64 的 posix 线程是否比 win32 线程慢?如果是这样,我将如何编写一个包装器,让我可以使用类似 std::thread 的接口但在后台使用 win32 线程(或者如果有人已经编写了这样的包装器,则可以找到这样的包装器)?
【问题讨论】:
-
pthreads在 Windows 上可能是pthreads-win32,它只是公开了pthreadAPI,但在底层使用了win32线程。 -
另外,如果您对选项持开放态度,VS2013+ 完全实现了 C++11 的
std::thread规范,并使用本机线程、互斥体、条件变量等。我是 乞求我的雇主允许我们离开 VS2005/VS2010,这是原因之一(那和 C++11,即使是 MS 可怜的实现,在任何一天都比 C++98 好周和周日两次)。 -
我现在实际上正在使用 VS2013,但出于多种原因我希望切换(首先,我无法在堆栈上分配对齐的类)。
-
这些来源中是否有任何解释为什么或在什么情况下“POSIX 线程较慢”?从表面上看,这似乎不合理;一个线程就是一个线程,无论如何,CPU 都以同样的方式处理指令。
-
好吧,既然您阅读了“多个来源”(URL?) POSIX 线程比 win32 线程慢,请检查这些来源以获得精确的测量或基准来证明他们的主张。作为记录,我可以想象不同的线程实现在启动期间和线程间通信(互斥体等)的性能上有所不同,但内部的“正常”操作不应该有所不同。
标签: c++ multithreading winapi c++11 mingw-w64