
230
|
第七章
混合執行緒
如果結合核心與用戶層級執行緒會怎樣呢?有可能實現 1:1 模型的真正平行性以及 N:1
模型的免成本環境切換嗎?如果你願意接受相當的複雜性,確實是這樣。N:M 執行緒,
也稱為
混合執行緒
(
hybrid threading
),試圖達到兩全其美的境界:不僅核心可以提供
原生的執行緒概念,而且用戶空間也可以實作用戶執行緒。用戶空間可以搭配核心,然
後決定如何把 N 個用戶執行緒映射到 M 個核心執行緒,其中 N>=M。
雖然實作的方式不同,但典型的策略是不要以一個核心執行緒來支援大部分的用戶執行
緒。一個行程可能會包含上百個用戶執行緒,但只會有少量的核心執行緒,以及少數在
運行中的處理器(每個處理器至少要有一個核心執行緒讓系統能夠充分被利用)與阻擋
式 I/O。正如你可以想像到的,這樣的模型相當複雜難以實作。考慮到 Linux 廉價的環
境切換成本,大多數的系統開發者並不認為值得採用此做法,因此就 Linux 而言,1:1
模型仍廣受歡迎。
排班器活化作用
(
Scheduler Activation
)是替用戶層級執行緒提供核心支
援的一個解決方案,讓 N:M 執行緒的執行更具表現力。它起初是華盛頓
大學的一篇學術論文,後來為FreeBSD 及 NetBSD 所採用,成為
FreeBSD 及 NetBSD 之執行緒實作的基礎。排班器活化作用讓用戶空間
得以控制與洞察核心的行程排班,使得混合模型更有效率,並且修正了核
心未支援之實作上可能會出現的若干問題。
FreeBSD 及 NetBSD