執行緒、執行緒與程式、ULT與KLT

凡古一往發表於2020-12-22

2.6 執行緒

程式分為兩個組成部分
  • 排程的基本單位
  • 資源的獨立單元

執行緒作為基本排程單位獨立出來,由OS排程

多執行緒

單個程式內支援多個併發路徑的能力
多執行緒

單執行緒

一個程式只有一個執行緒
單執行緒

執行緒是程式中的一個實體,是獨立排程和分派的單元

2.6.1 程式vs執行緒

一個程式可以有一個或多個執行緒
掛起或終止一個程式=掛起或終止其內部所有執行緒

執行緒
  • 執行狀態state:派生、阻塞、解除阻塞、結束
  • 上下文context
  • 區域性變數
  • 共享的資源和記憶體
    單執行緒多執行緒

多執行緒比單執行緒多一個tcb(執行緒的“pcb”)

執行緒優點
  1. 建立耗時短
  2. 終止耗時短
  3. 切換耗時短(同程式內)
  4. 提高了不同執行程式間的通訊效率
執行緒同步
  • 一個程式中的所有執行緒共享該程式資料和空間
  • 一個執行緒對資料修改會影響其他執行緒

2.6.2執行緒分類

使用者級執行緒 ULT(User-Level Thread)
  • 執行緒核心不可見,由應用程式管理
  • 程式阻塞,執行緒不一定阻塞;程式執行,執行緒也可能阻塞
  • 優點
  • 執行緒切換不需要切換核心模式
  • 排程策略可以應用程式定製
  • 可執行在任何種類的OS上
  • 缺點
  • 執行緒系統呼叫時會阻塞該程式所有執行緒
  • 不適用於多核系統
  • 缺點的改進辦法
  • jacketing技術:由應用級呼叫替代系統呼叫
    ULT
核心級執行緒 KLT(Kernel level Thread)
  • 核心管理執行緒,應用程式不管理執行緒
  • 優點
  • 可以將多個執行緒分配到多個cpu上
  • 一個執行緒阻塞時,同程式其他執行緒不會阻塞
  • 核心本身也可以使用多執行緒
  • 缺點
  • 執行緒切換要進行模式切換

KLT

混合方法(ULT+KLT)
  • 執行緒在使用者級建立
  • 執行緒排程、同步由應用程式完成
  • 使用者執行緒一個或多個對映到核心執行緒上(核心執行緒要更少)
    MIX

相關文章