多線程技術&KLT與ULT&多線程實現混合策略

單線程結構進程

•傳統進程是單線程結構進程

單線程結構進程的問題

單線程結構進程在併發程序設計上存在的問題:

• 進程切換開銷大

• 進程通信開銷大

• 限制了進程併發的粒度

• 降低了並行計算的效率

解決問題的思路

• 把進程的兩項功能,即“獨立分配資源”與“被調度分派執行”分離開來

• 進程作爲系統資源分配和保護的獨立單位,不需要頻繁地切換;

• 線程作爲系統調度和分派的基本單位,能輕裝運行,會被頻繁地調度和切換

• 線程的出現會減少進程併發執行所付出的時空開銷,使得併發粒度更細、併發性更好

多線程結構進程

多線程環境下進程的概念

在多線程環境中,進程是操作系統中進行保護和資源分配的獨立單位。具有:

•用來容納進程映像的虛擬地址空間

•對進程、文件和設備的存取保護機制

多線程環境下線程的概念

線程是進程的一條執行路徑,是調度的基本單位,同一個進程中的所有線程共享進程獲得的主存空間和資源。它具有:

• 線程執行狀態

• 受保護的線程上下文,當線程不運行時,用於存儲現場信息

• 獨立的程序指令計數器

• 執行堆棧

• 容納局部變量的靜態存儲器

多線程環境下線程的狀態與調度

線程狀態有運行、就緒和睡眠,無掛起

與線程狀態變化有關的線程操作有:

孵化、封鎖、活化、剝奪、指派、結束

OS感知線程環境下:

處理器調度對象是線程

進程沒有三狀態(或者說只有掛起狀態)

OS不感知線程環境下:

處理器調度對象仍是進程

用戶空間中的用戶調度程序調度線程

併發多線程程序設計的優點

• 快速線程切換

• 減少(系統)管理開銷

•(線程)通信易於實現

• 並行程度提高

• 節省內存空間

多線程技術的應用

• 前臺和後臺工作

• C/S應用模式

• 加快執行速度

• 設計用戶接口

內核級線程KLT, Kernel-Level Threads

線程管理的所有工作由OS內核來做

OS提供了一個應用程序設計接口API,供開發者使用KLT

OS直接調度KLT

內核級線程的特點

• 進程中的一個線程被阻塞了,內核能調度同一進程的其它線程佔有處理器運行

• 多處理器環境中,內核能同時調度同一進程中多個線程並行執行

• 內核自身也可用多線程技術實現,能提高操作系統的執行速度和效率

• 應用程序線程在用戶態運行,線程調度和管理在內核實現,在同一進程中,控制權從一個線程傳送到另一個線程時需要模式切換,系統開銷較大

用戶級線程ULT, User-Level Threads

用戶空間運行的線程庫,提供多線程應用程序的開發和運行支撐環境

任何應用程序均需通過線程庫進行程序設計,再與線程庫連接後運行

線程管理的所有工作都由應用程序完成,內核沒有意識到線程的存在

用戶級線程的特點

• 所有線程管理數據結構均在進程的用戶空間中,線程切換不需要內核模式,能節省模式切換開銷和內核的寶貴資源

• 允許進程按應用特定需要選擇調度算法,甚至根據應用需求裁剪調度算法

• 能運行在任何OS上,內核在支持ULT方面不需要做任何工作

• 不能利用多處理器的優點,OS調度進程,僅有一個ULT能執行

• 一個ULT的阻塞,將引起整個進程的阻塞

Jacketing技術

•把阻塞式系統調用改造成非阻塞式的

•當線程陷入系統調用時,執行jacketing程序

•由jacketing 程序來檢查資源使用情況,以決定是否執行進程切換或傳遞控制權給另一個線程

用戶級線程 vs. 內核級線程

• ULT適用於解決邏輯並行性問題

• KLT適用於解決物理並行性問題

多線程實現的混合式策略

線程創建是完全在用戶空間做的

單應用的多個ULT可以映射成一些KLT,通過調整KLT數目,可以達到較好的並行效果

多線程實現混合式策略的特點

• 組合用戶級線程/內核級線程設施

• 線程創建完全在用戶空間中完成,線程的調度和同步也在應用程序中進行

• 一個應用中的多個用戶級線程被映射到一些(小於等於用戶級線程數目)內核級線程上

• 程序員可以針對特定應用和機器調節內核級線程的數目,以達到整體最佳結果

• 該方法將會結合純粹用戶級線程方法和內核級線程方法的優點,同時減少它們的缺點

線程混合式策略下的線程狀態

• KLT三態,系統調度負責

• ULT三態,用戶調度負責

• 活躍態ULT代表綁定KLT的三態

• 活躍態ULT運行時可激活用戶調度

• 非阻塞系統調用可使用Jacketing啓動用戶調度,調整活躍態ULT

多線程實現的各種策略總結

NUM446

個人博客式公衆號

用心每一天

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章