IT鐵人
雖然前面說CPU在執行程式時,都用process來敘述,不過其實在process中有一條一條的thread,那才是CPU在分配的最小單位。
所謂的thread,又稱為light-weight process,是分配CPU的最小單位。當thread被建立後,每條thread有自己私有的內容,包含:
1.Thread ID
2.Thread state
3.Programming Counter
4.CPU registers
5.Stack
6.Local variables
Kernel也會幫助thread建立TCB,就像是PCB一樣。
與process有很大的不同,同一個process內不同的thread彼此共享此一process的:
1."Static" local variables
2.Code Section
3.Data Section(global section)
4.other OS Resources
5.heap memory
以下用圖片敘述process跟thread的差異,傳統process沒有多個thread,稱為single-thread。
由於thread執行在process之下,具有以下好處:
Responsiveness
當process下的thread被block,此時CPU可以挑別的可執行的thread繼續執行,不會導致整個process被blocked。
Resource Sharing
thread共享同一個process的部分Resource,可以方便執行。
Economy
thread共享code, data section以及other OS Resource,thread的context switch比process的快。
Scalability
同一個process內不同thread可以平行在不同的CPU/core上執行。
因為process之間無共享,thread之間會有部分共享,所以兩者之間有以下差異。
Process(single thread) | Thread |
---|---|
Heavy weight process | Light weight process |
分配Resource的對象單位 | 分配CPU Time的對象單位 |
single-threaded model | Multi-threading model |
不同process無共享的content | 同一process的thread共享部分Resource |
process若blocked則整個process就被blocked | 只要process內有thread可執行則不會被blocked |
creation, context switch, management代價高 | 代價低 |
對於Multiprocessors效益發揮差 | 效益發揮佳 |
thread跟process一樣分成user-level以及kernel-level。
user-level thread由thread library提供相關API,也就是C或是C++最前面需要include的那些library,此作法kernel並不知道有其他新創出來的thread,所以如果執行的thread被blocked,則整個process就被blocked,雖然creation跟management很快,但是就喪失了Scalability。
kernel-level thread代表thread由kernel來負責,此時kernel知道每一條thread,可以適當的分配CPU Time,優缺點與user-level thread相反。
前面提到了有分成user-level以及kernel-level,底下就會介紹他們執行時的對應關係。
介紹了thread的概念,可以想像process是一間工廠,thread是工廠中的工人,他們會共用機械等資源,也會保留自身的東西,不過在這種情況下會發生人們爭奪同一個機械的問題發生,那就是我們下一篇要講的,Race Condition。
上一篇 | 下一篇 |
---|---|
CPU Scheduling Algorithm | Deadlock |