Multithreading

為什麼多對多執行緒模型中的每個並發系統呼叫都需要 LWP(輕量級程序)?

  • October 28, 2019

LWP是放置在使用者執行緒和核心執行緒之間的資料結構,對使用者執行緒庫表現為虛擬處理器。因此,多對多執行緒模型所需的最小 LWP 數量是並發阻塞系統呼叫的數量。

請解釋為什麼會這樣?

輕量級程序(在 Unix 和類 Unix 中)是在使用者空間中通過單個核心執行緒執行並與同一使用者程序的其他 LWP 共享其地址空間和資源的程序。

系統呼叫是從使用者空間呼叫核心功能。當使用者程序執行系統呼叫時,呼叫由與使用者程序/執行緒關聯的 LWP 處理,並在呼叫在核心中處理(通過與 LWP 關聯的核心執行緒)以及呼叫解決了,核心執行緒和LWP又空閒了。

這就是為什麼在多對多執行緒模型中所需的最小LWP 數量是並發阻塞系統呼叫的數量,因為阻塞系統呼叫和 LWP 是 1:1 相關的(當被阻塞系統使用時,LWP 不能執行任何其他任務從使用者執行緒呼叫)

引用自:https://unix.stackexchange.com/questions/234170