多核系统上的C++多线程

Fra*_*Liu 1 c++ multithreading

在四核CPU上运行以下代码时,我保证这四个线程将在四个不同的内核上运行吗?

或者操作系统可以根据系统的工作负载在单个核心上放置多个线程.如果是这种情况,由于上下文切换和其他线程开销,运行多线程甚至可能会给您带来性能损失.

我想没有办法对应用程序进行编码,这会强制线程在不同的内核上运行?

int main()
{
    std::vector<std::thread> threads(3);

    for (size_t i = 0; i < 3; i++)
    {
        threads[i] = std::thread(DoSomethingLengthy);
    }

    DoSomethingLengthy();

    for (auto& thread : threads)
    { 
        thread.join(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Non*_*upt 8

难道,除非你知道自己在做什么,有亲和力面具玩.

在现代系统中,调度是一个复杂的逻辑,涉及热节流,缓存局部性,NUMA距离和许多因素.系统知道当前机器状态比您(或者您甚至不能访问任何信息)更好地做出更好的决策.

对于即时,调度程序可能决定将多个线程放在同一个内核(运行频率为4GHz)上,只是为了让另一个内核冷却下来(以500MHz运行),结果仍然比在所有内核上均匀地放置线程更好.