# Thread ###### tags: `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差異 因為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相反。 ## Multi-threading Model 前面提到了有分成user-level以及kernel-level,底下就會介紹他們執行時的對應關係。  * Many to One Model 同一process的所有user-level thread對應到一個kernel-level thread,因為只有一個kernel-level thread要向上找user-level thread執行,所以會比較迅速,不過一樣會發生前面提到的缺點,也就是thread blocked cause process blocked。  * One to One Model 這種模式代表只要有一個user-level thread被建立,就會建立一個kernel-level thread,一對一的對應關係可以達成thread的優點,不過在kernel-level thread太多的時候,就會導致效果變差,CPU會被kernel-level thread稀釋掉。  * Many to Many Model 這種模式會先固定好kernel-level thread的數量,可能會根據CPU核心數決定,並且往上找需要執行的user-level thread執行,這種作法不但能達到thread的優點,也不會有太多kernel-level thread的問題,只是設計比較複雜而已。 ## What's Next? 介紹了thread的概念,可以想像process是一間工廠,thread是工廠中的工人,他們會共用機械等資源,也會保留自身的東西,不過在這種情況下會發生人們爭奪同一個機械的問題發生,那就是我們下一篇要講的,Race Condition。 | 上一篇 | 下一篇 | |-|-| |[CPU Scheduling Algorithm](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/H1ZwYW_mF)|[Deadlock](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/Hy6Ot7s7Y) 
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.