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? –