c - pthread 在使用虚拟核心时没有提供性能提升

标签 c linux multithreading pthreads

我是第一次玩 pthreads,在我的机器上运行时发现了一些奇怪的东西。

我有一个带有 2 个物理内核和 4 个虚拟内核的 Intel i5。

当使用 2 个线程运行我的程序时,我获得了大约两倍的性能,但是当使用 4 个线程运行时,我获得了与两个线程相同的性能。为什么会这样?

2 个线程的结果: 真正的 0m9.335s 用户 0m18.233s 系统 0m0.132s

4 个线程的结果: 真正的 0m9.427s 用户 0m34.130s 系统0m0.180s

编辑:代码是完全可并行化的,线程在没有任何共享资源的情况下独立运行。

最佳答案

因为您实际上只有 2 个内核。 Hyper-threading不会神奇地为您再创建 2 个核心。超线程可以在 CPU 上运行 4 个线程,但不能同时运行。它仍然会在两个物理内核上分配线程,并在执行管道中来回切换线程。

您预期的性能提升最多可达 30%。

关于c - pthread 在使用虚拟核心时没有提供性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419868/

相关文章:

c - 读取包含指向列表的指针的段寄存器 (%gs)

linux - 使用 Windows 批处理通过 OpenSSH 远程连接到 Linux

c++ - 停止 C++ 11 std::threads 等待 std::condition_variable

c - 如何找出启用的位数 : bits handling

c - 当我尝试编写简单文本时,aio_write() 不起作用

ruby-on-rails - Capistrano 检查权限始终不可写

linux - 使用 tail 命令后从原始文件中删除行

java - Apache 和 JBOSS 使用 AJP (mod_jk) 导致线程数激增

java - 在 Parse android API 上调用 findInBackground() 时,我们会在哪个线程上得到回调

c - 由于 asprintf 函数无法编译程序