2018年2月5日 星期一

執行緒 (Thread)



Process vs. Thread

概念: 一個車隊 (行程) 內有多個車輛 (執行緒) 共同完成任務。

執行緒是CPU實際運算的最小單位,它被包含在行程內,又可稱之Lightweight Process。

一個行程內可以包含多個執行緒 - 也就是多執行緒的概念,其目的是透過共享資源實現多工 (不同行程間運作時無法共享資源,對於整體系統負和大),當然行程內也可以只有一個單執行緒。

在同一行程內多個並行執行緒擁有
共用的部分: Code section, Data section, OS resources.
獨立的部分: Thread ID, Program Counter, Register, Stack
.

User vs. Kernel Thread

User Thread: 使用者應用程式 (in User mode) 所使用的執行緒,由Thread Library管理,OS並不知道執行緒的存在與否,運作快。

Kernel Thread: 由OS Kernel直接管理的執行緒,運作慢。

Multithreading Model

User Threads to Kernel Threads

- Many to One: 執行緒主要作業在User space,不會動用到kernel,效率高;此模型缺陷在於當任一User Thread執行blocking system call時,會導致整個行程halt,也無法在多處理器上使用。

- One to One: 主流,為Windows/ LINUX所採用。允許多個執行緒在多重處理器上並行運作,唯在產生Kernel Thread時負擔較高,
需限制執行緒的數量。 

- Many to Many: 彌補前兩類model的缺點,預先產生合理的執行緒數目,使其在多處理器上並行運作,當某一執行緒暫停時,OS可以立即安排另一個執行續接替工作。



Thread Cancellation

Target thread: 行程內執行"終止"的執行緒。

- Asynchronous cancellation: 接獲終止的信號後,Target thread立即執行終止行為,無須考量其它執行緒。

- Deferred cancellation: Target thread並不立即執行終止行為,而是觀察其它執行緒情況,在最佳時機 (Cancellation point) 執行終止。


Signal Handling

信號 (Signal) 由特定事件產生,Signal handler傳遞信號予行程通知事件發生,且信號一旦發送後必需處於監控之下。

傳遞的方式
- 將信號傳遞予有要求使用的執行緒。
- 將信號傳遞予同一行程內的所有執行緒。
將信號傳遞予行程內的特定執行緒。
- 指定一個執行緒,接收所有傳遞至其所屬行程之信號。



Thread Pool

預先產生一定數量的執行緒放置在執行續池 (Thread Pool) 裡。

優點
- 使用現存的執行緒比產生新的成本低。
- 限制系統內執行緒的總數,避免資源消耗殆盡。


沒有留言:

張貼留言