我正在尝试将 Boost::lockfree::spsc_queue 用于将在多个平台上受支持的应用程序。我使用各种版本的 Visual Studio 在 Windows 7 上尝试了来自 boost_1_55_0/libs/examples/lockfree 的 spsc_queue.cpp 示例,它们都工作正常。它在 CentOS 6.3(在 VMWare Player 6.0 下运行)上也能完美运行。但是在 Centos 5.3 上,使用 gcc 4.1.2(也在 VMWare 下运行)的性能是 Not Acceptable ——它比 CentOS 6.3 慢了大约 200 倍。我需要支持所有这些操作系统和编译器版本,尽管它们太旧了,不再受支持。
有谁知道为什么在 CentOS 5.3 上这么慢?
最佳答案
感谢您对我的问题提出的有用评论。我现在发现,性能不佳是由于在仅使用我的一个 CPU 内核的 VM 上的 RHEL 5 上调度线程的方式造成的。使用多核时问题消失了,对于单核,对 Boost 示例进行以下修改(即让生产者在队列满时休眠一小段时间)大大 boost 了整体速度:
void producer(void)
{
for (int i = 0; i != iterations; ++i) {
int value = ++producer_count;
while (!spsc_queue.push(value))
usleep(1000); // WAS: ; (empty statement)
}
}
关于c++ - Boost.lockfree 在 RHEL 5.3 上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461579/