Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++_Multithreading_Pthreads - Fatal编程技术网

C++ 如何在不同的内核上运行不同的线程?

C++ 如何在不同的内核上运行不同的线程?,c++,multithreading,pthreads,C++,Multithreading,Pthreads,可能重复: 我在用Ubuntu中的G+编译器编写C++程序。我的程序中有4个线程,CPU上有4个内核。我想确保每个线程将在不同的核心上运行。我很少熟悉pthread。请参阅sched_setaffinity函数:不要这样做。让系统安排线程。如果您将线程与不同的内核相关联,那么只会妨碍调度程序。当您的应用程序是唯一消耗CPU的应用程序时,调度程序自然会将每个线程调度到单独的核心上。我可以问一下您为什么要这样做吗?如果您确保踏板不会相互交错(以便它们可以同时运行),则无论何时任何内核有空闲时间,操

可能重复:


我在用Ubuntu中的G+编译器编写C++程序。我的程序中有4个线程,CPU上有4个内核。我想确保每个线程将在不同的核心上运行。我很少熟悉pthread。

请参阅sched_setaffinity函数:

不要这样做。让系统安排线程。如果您将线程与不同的内核相关联,那么只会妨碍调度程序。当您的应用程序是唯一消耗CPU的应用程序时,调度程序自然会将每个线程调度到单独的核心上。

我可以问一下您为什么要这样做吗?如果您确保踏板不会相互交错(以便它们可以同时运行),则无论何时任何内核有空闲时间,操作系统都会安排它们。@自动计算,实际上具有内核和套接字亲和力会极大地影响性能。想象一下fork/join,通常您希望在空闲内核上调度额外的线程,而不是在相同的内核上启动(因为它通常更快),以便实际并行运行。此外,为了利用局部性,您更希望在同一套接字上调度。局部性是一个很好的理由,但正如David在下面指出的,结果并不一定像您预期的那样好。@在简单的情况下(即一个进程完成所有工作),调度程序将为您确保局部性。@David,调度程序通常会在同一个核心上生成新线程,它们会稍微工作一点,然后重新调度。除非清楚,请想象2个插座,每个插座有4个孔。您有2个fork/join任务正在进行(在同一个过程中),调用2个sorts。您希望单个排序操作上的线程驻留在同一个套接字上,因此通过缓存的通信速度更快。这是一个注释,而不是答案。这可能是正确的,但是如果这个练习的目的是找出当线程被固定时会发生什么,那么你就是在阻碍学习。为什么不在你工作的时候烧掉Linux手册呢,知识是危险的-P