0
我有一个主要进程将创建4个线程。如果我只运行所有4个线程,内核会使用所有4个内核,还是将程序在单个内核上多线程化?如果不是,那么如何在多核上处理同步。我有一个4core英特尔CPU和我的程序是在c + +在C++/c中利用所有4个核心
我在虚拟机的Linux上运行此。
我有一个主要进程将创建4个线程。如果我只运行所有4个线程,内核会使用所有4个内核,还是将程序在单个内核上多线程化?如果不是,那么如何在多核上处理同步。我有一个4core英特尔CPU和我的程序是在c + +在C++/c中利用所有4个核心
我在虚拟机的Linux上运行此。
你真的不知道。
首先,C++ 03标准不知道什么关于线程,核心或任何类型的东西。因此无论如何这都是依赖于平台的。
但即使从平台的角度来看,你通常还不知道。操作系统安排线程和作业。操作系统可能会 - 也可能不会 - 给你指定一个特定线程的“processor affinity”的方法,但是这通常需要一些跳跃式跳转来利用。
一个你也应该记住的事情是,如果你的目标是让每个使用核心100%,你会经常需要超过ñ线程(其中ñ是核数)。线程花费大量时间睡眠,等待磁盘,并且一般不会在核心上执行任何操作。您需要的确切线程数取决于您的实际应用程序和平台,但实验可以帮助您指导您进行微调。
嗯,你可以随时随地,你知道...试试吧。操作系统在线程调度方面非常出色,我不会担心太多。 –
对于第一部分:你尝试和检查? – Mat
这取决于操作系统。视窗? Linux呢? BSD?也在编译器上。 ICC? MSVC++? GCC? TCC? –