2013-11-22 85 views
2

多核處理器利用線程級並行性,這意味着多個線程並行運行。假設一個進程只有一個線程,那麼在執行這個進程的時候其他內核是否保持空閒?在Linux系統中,調度程序將進程和線程視爲一項任務。它在調度過程中不會區分進程和線程。那麼,這是否意味着不同的內核並行執行不同進程的不同線程?Linux調度程序如何調度多核處理器上的進程?

當上下文切換髮生時,這是否只發生在一個內核或cpu的所有內核上?

+0

我沒有得到一個問題。是的,多個進程可以同時在不同的核心上運行。每個進程至少有一個線程。你能否更具體一些? – keltar

+1

這個問題似乎是脫離主題,因爲它是關於Linux,而不是編程。 –

回答

1

你是對的:進程和線程與Linux調度程序的觀點相同。這些任務根據調度程序的規則排隊等待輪到他們。

有調度規則,如優先級或CPU關聯(以防止線程遷移到另一個核心並保留緩存數據)。

由於CPU會自動運行某些內核代碼以允許搶佔,所以上下文切換可能會在每個固定時間量(時間片)上發生在內核上。根據調度程序的規則,任務可以運行多個時間片。當線程調用使其不可運行的函數時(例如,等待IO),上下文切換也會發生。

在某些情況下,如果不是全部,每個內核都有一個調度進程完成所有工作。

還有一個類似的問題superuser