我有一個想法來檢測PC的核心數量,但我不確定它是否工作。下面是代碼:
是否有可能使用thread_sleep來檢測核心數量
int sleepSec = 2; // 2 sec
void funcSleep()
{
sleep(sleepSec);
}
const int SIZE = 4;
threadArr arr[SIZE];
int begin_time = getCurrentTime();
for(int i = 0; i < SIZE; i++)
{
arr[i] = thread_create(funcSleep);
}
for(int i = 0; i < SIZE; i++)
{
thread_join(arr[i]);
}
int end_time = getCurrentTime();
print("The number of cores = ");
print(sleepTime * SIZE/(end_time - start_time));
如果我們忽略所有的延遲,我覺得上面的代碼能告訴我電腦的核心數量。
總之,如果管理多線程的策略是:如果可能的話,將線程分配給未使用的內核。代碼應該運行良好。
如果不是,你能解釋一下PC如何處理多線程?
如果是單核PC,我上面的代碼總是需要8秒才能完成。我對嗎?我不明白爲什麼「你的程序在任何計算機上運行大概2s」 – Yves
是因爲我的功能是「睡眠」2秒,而不是做一些真正的任務? – Yves
@Thomas「睡眠」不會忙於等待;當這個程序正在休眠時,讓其他程序運行在該核心上;否則你會浪費大量資源。想象一下,如果您的手機上的鬧鐘應用程序每當您安排了鬧鐘時,都會自行採用一個cpu核心。 –