Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?_C++_Linux_Stl_Multiprocessing - Fatal编程技术网

C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?

C++ 如何在另一个内核上启动线程,而不将处理器关联设置为特定的内核?,c++,linux,stl,multiprocessing,C++,Linux,Stl,Multiprocessing,如何在另一个内核上启动std::thread,而不显式地将处理器关联设置为特定的内核 我知道线程可以分配给一个特定的内核,但是有没有办法告诉调度程序在另一个内核上启动进程,并让调度程序决定在哪个内核上运行进程最好?简单的回答是,您没有 你有两个选择: 您可以通过设置其关联性来选择线程可以运行的处理器核心 您可以让调度程序选择线程将在哪些内核上运行 要么由您选择,要么由调度程序选择。就这么简单 对于您似乎想要的(启动一些线程以便它们在多个内核上运行),您可能希望让调度程序执行调度 设置处理器关联性

如何在另一个内核上启动
std::thread
,而不显式地将处理器关联设置为特定的内核


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

简单的回答是,您没有

你有两个选择:

  • 您可以通过设置其关联性来选择线程可以运行的处理器核心
  • 您可以让调度程序选择线程将在哪些内核上运行
  • 要么由您选择,要么由调度程序选择。就这么简单

    对于您似乎想要的(启动一些线程以便它们在多个内核上运行),您可能希望让调度程序执行调度

    设置处理器关联性基本上适用于您对线程调度有足够了解的情况,这样您就可以比一般用途的调度程序做得更好。至少从我所看到的情况来看,大约75%的人设置了亲和性,这基本上是一个错误,他们最终会减慢代码的速度。另外24%的人,他们没有伤害,但也没有真正的好处。而且,可能有多达1%的时间,他们实际上完成了一些有用的事情


    请放心,编写调度器的人通常都知道,如果您启动了十几个线程,那么它们并不是都在一个内核上运行的。最简单的(可能也是最常见的)情况是,it只需在所有可用内核上调度线程。如果没有,通常是因为用户(至少间接地)配置了系统(例如,笔记本电脑的部分电源管理可能是当它使用电池时,它限制了使用中的内核数量,至少在某些情况下)。

    标题说明了如何在另一个内核上启动线程。问题的主体是从另一个核心开始这个过程。对不起,如果我站错了,你能更准确一点吗?@Neb-thread=process@Dave线程的全部目的不是启动另一个进程。@user0042我的理解是线程调用linux内核abi,它分叉父进程并创建子进程?问题是如何确保新流程在不同的核心上启动(与相同的核心相比)?我知道调度程序很可能会切换它,但是有没有办法告诉调度程序从一开始就在不同的核心上运行它?@Dave例如,您可以使用以下命令增加调度并发任务的机会。但除此之外,没有其他方法,只能像您提到的那样设置处理器相关性。