如何在另一个核心上启动 std::thread
而不显式设置处理器与特定核心的关联性?
我知道线程可以分配给特定的核心,但是有没有办法告诉调度程序在另一个核心上启动进程,并让调度程序决定哪个核心最适合运行该进程?
最佳答案
简单的回答是你不知道。
你有两个选择:
- 您可以通过设置线程的关联性来选择线程可以运行的处理器核心。
- 您让调度程序选择线程将在哪个核心上运行。
要么您选择,要么调度程序选择。就这么简单。
对于您似乎想要的内容(启动一些线程,以便它们在多个内核上运行),您可能想让调度程序进行调度。
设置处理器关联性基本上是在您对线程调度有足够了解的情况下,您可以比通用调度程序更好地进行调度。至少从我所看到的来看,大约 75% 的情况下,人们设置亲和性基本上是一个错误,他们最终会减慢代码速度。另外 24% 的人没有造成任何伤害,但也没有真正的好处。而且,也许有多达 1% 的时间,他们实际上完成了一些有用的事情。
请放心,编写调度程序的人通常都知道,如果您启动十几个线程,并不意味着它们都在单个内核上运行。最简单(也可能是最常见)的情况是简单地在所有可用内核上调度线程。如果没有,通常是因为用户(至少间接)将系统配置为不这样做(例如,笔记本电脑上电源管理的一部分可能是当它使用电池运行时,它会限制正在使用的内核数量,至少在某些情况下)。
关于c++ - 如何在另一个核心上启动线程而不将处理器亲和性设置到特定核心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141724/