在四核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();
}
}
难道不,除非你知道自己在做什么,有亲和力面具玩。
在现代系统上,调度是一个复杂的逻辑,涉及热节流,高速缓存局部性,NUMA距离和许多因素。对于您当前的计算机状态,系统要比您(或否则您甚至无权访问任何信息)能更好地做出决策。
暂时,调度程序可能会决定将多个线程放在同一个内核上(以4GHz运行),只是让另一个内核冷却下来(以500MHz运行),其结果仍然比在所有内核上均匀地放置线程要好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句