跳轉至

線程調度

執行緒調度分為使用者級執行緒調度核心級執行緒調度,二者各自有不同的工作方式和特點。


使用者級執行緒調度

  • 調度機制:核心不直接負責使用者層級執行緒的調度,而是將CPU分配給某個進程(例如進程A),並為其分配一個時間片。在此時間片內,由行程A內部的執行緒調度程序負責選擇具體執行的執行緒(如執行緒A1或A2)。
  • 執行緒切換:行程A的多個執行緒可以在該行程內部進行切換,核心對執行緒的切換並不干涉。只有當核心決定切換到另一個進程時,才會發生進程層級的切換。
  • 效能:使用者級執行緒切換使用機器指令,切換速度快。
  • 阻塞情況:當使用者級執行緒因I/O操作等原因而阻塞時,整個行程也會被掛起,導致進程內的其他執行緒無法執行。

核心級執行緒調度

  • 調度機制:由核心直接負責執行緒的調度。核心能夠調度並切換不同進程的線程,使不同進程的線程之間可以進行切換。
  • 執行緒切換:核心在切換不同行程的執行緒時會進行完整的上下文切換,確保系統管理和調度的精確性。
  • 效能:核心級執行緒切換需要進行完整的上下文切換,因此切換速度相對較慢。
  • 阻塞情況:在核心級執行緒方式下,當一個執行緒因等待I/O而阻塞時,不會導致整個行程被掛起,進程內的其他執行緒仍可繼續運作。

使用者級執行緒調度與核心級執行緒調度的比較

特點 使用者級執行緒調度 核心級執行緒調度
調度速度 切換速度快,直接使用機器指令 切換速度較慢,需完整上下文切換
阻塞處理 單一執行緒阻塞會掛起整個行程 單一執行緒阻塞不會影響進程內其他執行緒
調度控制 由進程內部的執行緒調度程序負責 由核心直接負責調度與切換

使用者級執行緒調度適用於輕量級、無阻塞需求的任務,而核心級執行緒調度適用於需要細粒度管理和支援高並發的場景。