iT邦幫忙

2021 iThome 鐵人賽

DAY 24
1

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 Deadlock


上一篇
Day-23 CPU Scheduling Algorithm
下一篇
Day-25 Deadlock
系列文
杰哥的考研紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言