介紹 Thread


Thread 由 thread ID, program counter, register set 以及 stack 組成,是Process管理下,實際的工作角色。

Multithread Programming

當一個 Process 不只有一個Thread時,可以稱其為Multithread。

One-core system

在單核心系統,一次只能處理一個Thread,碰上 Multithread 的 Process 時,雖不能同時處理,但可以交錯處理Threads,此時稱其運行方式為 Concurrency。

Multi-core system

在多核心系統,在 Concurrency 的情況,因為不同Thread可以分派給不同Core處理,因此同一時間下,多個Threads可以被同使處理,這種情況叫作 Parallelism。

明確地說,Concurrency是指系統可以允許多個Threads存在並安排處理,Parallelism則是多個Threads可以同時被處理。因此 Concurrency 並不意味 Parallelism。

Multithreading Model

實際上Thread可以分成 User Thread 以及 Kernel Thread,前者由使用者程式產生,後者由作業系統產生及管理,且處理 User Thread。User 及 Kernel Thread 的模型分為以下幾種:

Many-to-One Model

多個 User Threads 對應一個 Kernel Thread 處理。當一個Thread 發生 block,整個 process 會 block。並且即便在多核心系統,因為只有一個 Kernel Thread,無法平行處理 User Threads。

One-to-One Model

每個 User Thread 對應一個 Kernel Thread。因此當某一Thread 發生 Block 也不會讓其他 Thread Block。並且在多核系統也能 Parallel 運行。缺點是當User Thread 產生愈多,Kernel Thread也會一併產生,太多Thread會使得系統效能受影響。

Many-to-Many Model

所有 User Threads 對應數量相等或較少的 Kernel Threads,因此可以有效控制Kernel Threads的數量。雖然不僅能良好的平行處理 Threads 以及現至 Kernel Threads的數量,這種模型實現上比較困難,且系統的核心數隨著時代也會上升,因此Kernel Threads 數量慢慢不是嚴重的問題。


See also