.NET 核心之間的執行緒移動
來自多核使用、執行緒、執行緒池的後續問題。
> > 執行緒在其生命週期內是否從一個核心移動到另一個核心? > > >
當然。假設您在雙核系統上執行三個執行緒。向我展示一個不涉及在核心之間定期移動執行緒的公平時間表。
這是我第一次訪問這個網站,所以我想我沒有足夠的代表發表評論。我決定提出一個新問題來引用我想評論的問題。
選擇將執行緒移動到的核心的過程是什麼。調度程序是否有一個需要處理時間的執行緒列表,當一個執行緒完成時,它會放入另一個執行緒?
另外我想知道是否有關於執行緒在核心之間移動的語句的參考。或者它只是被認為是“常識”?
謝謝!
這不像執行緒生活在一個特定的核心上,它是一個將它移動到另一個核心的過程。
作業系統只是有一個執行緒(和/或程序)列表,這些執行緒(和/或程序)已準備好執行,並將在任何可用的核心/cpu 上分派它們。
也就是說,任何智能調度器都會嘗試盡可能多地將執行緒調度到同一個核心上——只是為了提高性能(數據更有可能在該核心的記憶體中等)
MSDN 有一些文章可能有助於澄清一些事情:調度優先級和多處理器。
摘錄(調度優先級):
執行緒根據其調度優先級調度執行。每個執行緒都被分配了一個調度優先級。優先級範圍從零(最低優先級)到 31(最高優先級)。只有零頁執行緒的優先級可以為零。(零頁執行緒是一個系統執行緒,負責在沒有其他執行緒需要執行時將任何空閒頁歸零。)
系統將所有具有相同優先級的執行緒視為平等。系統以循環方式將時間片分配給具有最高優先級的所有執行緒。如果這些執行緒都沒有準備好執行,則係統以循環方式將時間片分配給具有下一個最高優先級的所有執行緒。如果較高優先級的執行緒可以執行,系統將停止執行較低優先級的執行緒(不允許其完成使用其時間片),並將完整的時間片分配給較高優先級的執行緒。
關於多處理器:
具有多個處理器的電腦通常設計用於以下兩種架構之一:非均勻記憶體訪問 (NUMA) 或對稱多處理 (SMP)。
在 NUMA 電腦中,每個處理器都比其他處理器更靠近記憶體的某些部分,這使得記憶體的某些部分比其他部分更快地訪問記憶體。在 NUMA 模型下,系統嘗試在靠近正在使用的記憶體的處理器上調度執行緒。有關 NUMA 的詳細資訊,請參閱 NUMA 支持。
在 SMP 電腦中,兩個或多個相同的處理器或核心連接到單個共享主記憶體儲器。在 SMP 模型下,任何執行緒都可以分配給任何處理器。因此,在 SMP 電腦上調度執行緒類似於在具有單處理器的電腦上調度執行緒。但是,調度程序有一個處理器池,因此它可以調度執行緒並發執行。調度仍然由執行緒優先級決定,但它會受到設置執行緒親和性和執行緒理想處理器的影響,如本主題中所述。