當我運行我寫在四核英特爾上的單線程程序時,我可以在Windows任務管理器中看到,實際上,我的CPU的所有四個內核都或多或少處於活動狀態。一個核心比其他三個核心更加活躍,但也有一些核心活動。沒有其他程序(當然在操作系統內核旁邊)運行,這對於這個活動來說似乎是合理的。當我關閉程序時,所有內核都會下降到幾乎爲零。所有剩下的內核都有點「噪音」,所以我很確定所有可見的活動都直接或間接地來自我的程序(如調用系統例程)。是否有可能在一個以上的CPU內核上同時執行單線程程序?
有沒有可能是操作系統或內核本身儘量平衡所有4個內核的一些代碼或執行,即使它不是一個多線程程序?你有沒有任何文件記錄這種技術的鏈接?
一些相關信息的方案:這是寫在Qt的控制檯應用程序,任務管理器指出,只有一個線程在運行。也許Qt使用線程,但我不使用信號或插槽,也不使用任何GUI。
鏈接到任務管理器截圖:http://img97.imageshack.us/img97/6403/taskmanager.png
這個問題是語言無關的,不依賴於Qt的/ C++,我只是想知道,如果Windows或英特爾做的也來平衡所有核心單線程代碼。如果他們這樣做,這種技術如何工作?
所有我能想到的是,那個內核例程像從磁盤讀取等計劃上的所有核心,但是這不會顯著提高性能,因爲該代碼仍然運行同步到內核API調用。
編輯
你知道任何工具做比窮人Windows任務管理器單和/或多線程程序的更好的分析?
當然,除非你使用量子處理器,否則你只能有一個處理器在給定的時間點運行某個線程。但是,在一段時間內,單個線程可以遷移到其他CPU! – ennuikiller 2010-01-05 19:35:00
較舊版本的Windows(XP及更早版本)不要試圖在同一個內核上保留一個進程,它們默認情況下完全相反。 – 2010-01-05 19:50:37
操作系統調度程序可能會將一個進程(更精確地說,一個線程)從一個核心遷移到另一個核心,但這是不太可能的。我不知道Qt,但在我看來,更可能的解釋是Qt背後還有其他線程,在其他內核上進行調度。該活動以及內核和其他進程的活動顯示在其他內核上。 – Cheeso 2010-01-05 19:54:37