2017-09-10 20 views
-1

如何在另一个内核上启动std::thread而不明确地将处理器关联性设置为特定内核?如何在没有将处理器关联性设置为特定内核的情况下在另一个内核上启动线程?

我知道可以将线程分配给特定的内核,但是有没有办法告诉调度程序在另一个内核上启动进程,并让调度程序决定哪个内核最适合运行进程?

+2

标题说**如何启动另一个核心**的线程。问题的主体说**将在另一个核心**上启动该进程。对不起,如果我误解了,你能更精确吗? – Neb

+0

@Neb线程=进程 – Greg

+1

@Dave线程的重点不是启动另一个进程。 – user0042

回答

0

简短的回答是,你没有。

你有两个选择:

  1. 您选择的处理器核(多核)的线程可以通过设置它的亲和力运行。
  2. 您让调度程序选择线程将运行在哪个核心上。

无论你选择,还是调度程序选择。就那么简单。对于你似乎想要的东西(启动一些线程以使它们可以在多个内核上运行),你可能想让调度器执行调度。

设置处理器亲和性基本上是针对您对线程的调度足够了解的情况,您可以比通用调度程序更好地执行调度。至少从我所看到的情况来看,大约有75%的时间是人们设定亲和力的,这基本上是一个错误,最终他们放慢了代码的速度。另外24%他们没有伤害,但也没有真正的好处。而且,也许多达1%的时间,他们实际上完成了一些有用的事情。

请放心,编写调度程序的人通常会意识到,如果您启动了一打以上的线程,那么这并不意味着它们都运行在单个内核上。最简单的(也可能是最常见的)情况是它仅仅在所有可用内核上调度线程。否则,通常是因为用户(至少间接)将系统配置为不能(例如,笔记本电脑上的电源管理部分可能是在电池上运行时,它会限制正在使用的核心数量,至少在某些情况下)。

相关问题