c++ - Boost.lockfree 在 RHEL 5.3 上的性能

标签 c++ linux boost lock-free rhel5

我正在尝试将 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/

相关文章:

python - Jamroot (boost-bjam) 与共享库链接

c++ - 如何将 char[] 的前两个字节从网络字节序转换为主机字节序?

c++ - 重置套接字连接

c++ - Boost 包含了严重破坏——但这不是 Boost 的错

linux - 如何记录所有正在运行的进程的数据以用于调度程序模拟?

linux - 运行docker容器包含golang项目的问题

linux - 在 cpan 之前使用 yum/apt-get 来管理 UNIX 系统范围的 Perl 模块?

c++ - shared_ptr 在超出范围时抛出断言

c++ - 析构函数中的段错误

c++ - 如何防止基于 ASIO 的服务器终止