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)
难道不,除非你知道自己在做什么,有亲和力面具玩.
在现代系统中,调度是一个复杂的逻辑,涉及热节流,缓存局部性,NUMA距离和许多因素.系统知道当前机器状态比您(或者您甚至不能访问任何信息)更好地做出更好的决策.
对于即时,调度程序可能决定将多个线程放在同一个内核(运行频率为4GHz)上,只是为了让另一个内核冷却下来(以500MHz运行),结果仍然比在所有内核上均匀地放置线程更好.
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |