執行緒、執行緒與程式、ULT與KLT
2.6 執行緒
程式分為兩個組成部分
- 排程的基本單位
- 資源的獨立單元
執行緒作為基本排程單位獨立出來,由OS排程
多執行緒
單個程式內支援多個併發路徑的能力
單執行緒
一個程式只有一個執行緒
執行緒是程式中的一個實體,是獨立排程和分派的單元
2.6.1 程式vs執行緒
一個程式可以有一個或多個執行緒
掛起或終止一個程式=掛起或終止其內部所有執行緒
執行緒
- 執行狀態state:派生、阻塞、解除阻塞、結束
- 上下文context
- 棧
- 區域性變數
- 共享的資源和記憶體
多執行緒比單執行緒多一個tcb(執行緒的“pcb”)
執行緒優點
- 建立耗時短
- 終止耗時短
- 切換耗時短(同程式內)
- 提高了不同執行程式間的通訊效率
執行緒同步
- 一個程式中的所有執行緒共享該程式資料和空間
- 一個執行緒對資料修改會影響其他執行緒
2.6.2執行緒分類
使用者級執行緒 ULT(User-Level Thread)
- 執行緒核心不可見,由應用程式管理
- 程式阻塞,執行緒不一定阻塞;程式執行,執行緒也可能阻塞
- 優點
- 執行緒切換不需要切換核心模式
- 排程策略可以應用程式定製
- 可執行在任何種類的OS上
- 缺點
- 執行緒系統呼叫時會阻塞該程式所有執行緒
- 不適用於多核系統
- 缺點的改進辦法
- jacketing技術:由應用級呼叫替代系統呼叫
核心級執行緒 KLT(Kernel level Thread)
- 核心管理執行緒,應用程式不管理執行緒
- 優點
- 可以將多個執行緒分配到多個cpu上
- 一個執行緒阻塞時,同程式其他執行緒不會阻塞
- 核心本身也可以使用多執行緒
- 缺點
- 執行緒切換要進行模式切換
混合方法(ULT+KLT)
- 執行緒在使用者級建立
- 執行緒排程、同步由應用程式完成
- 使用者執行緒一個或多個對映到核心執行緒上(核心執行緒要更少)
相關文章
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Android程式框架:執行緒與執行緒池Android框架執行緒
- 執行緒與多執行緒執行緒
- 程式與執行緒執行緒
- 執行緒與程式執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 協程、執行緒與程式執行緒
- 程式與執行緒區別執行緒
- Java多執行緒001——一圖讀懂執行緒與程式Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- Java與執行緒Java執行緒
- 程序與執行緒執行緒
- 執行緒與程序執行緒
- 程式與執行緒的產生執行緒
- PHP 的多程式與執行緒PHP執行緒
- 淺析 Node 程式與執行緒執行緒
- 程式與執行緒的區別執行緒
- Python執行緒池與程式池Python執行緒
- Python程式與執行緒知識Python執行緒
- 深入理解JVM(③)執行緒與Java的執行緒JVM執行緒Java
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- Java執行緒(一):執行緒安全與不安全Java執行緒
- 【多執行緒與高併發】- 執行緒基礎與狀態執行緒
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 程式執行緒篇——程式執行緒基礎執行緒
- GIL與多執行緒執行緒
- cpu、核與執行緒執行緒
- 執行緒與執行緒池的那些事之執行緒池篇(萬字長文)執行緒
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 26、多執行緒與並行執行緒並行
- Linux程式與執行緒的區別Linux執行緒
- Linux執行緒與程式的區別Linux執行緒
- 【作業系統】程式與執行緒作業系統執行緒