iT邦幫忙

1

【小黑馬作業系統教室】(7) (Ch4)thread- 比process更輕量的程式

我是心原一馬,接下來整理恐龍書第四章的內容。

上一篇: 【小黑馬作業系統教室】(6) (Ch3)程式生命週期

在前幾篇的內容中,
我們不斷給大家介紹了程式(process)的概念,
相信跟著系列文學習的讀者大概心中有個感覺了。
(如還沒感覺的話,你就想成是你平時玩電腦時,
凡是能用滑鼠左鍵點兩下點開的檔案,都會有電腦程式在執行)

thread- 比process更輕量的程式

今天我們要介紹一個新名詞- thread,
thread跟process有點像,
那麼兩者差在哪裡呢?

簡單來說,thread可以視為輕量的process,
一支process裡面可以包含很多支thread,
在同一支process底下的所有thread共享相同的資源。
再講的細一點:

  • thread 是 OS 分配 CPU 時間的對象
  • process 是 OS 分配資源(資源指: 記憶體, 變數…等)的對象。

這樣講大概還是有點抽象難懂,
小馬決定再使用生活化的例子來做比喻。

一次搞懂program, process, thread的差異

這次的比喻為「蓋房子」,
好比說現在有個建築公司想蓋一間房子,
蓋房子之前會有工程師先畫一張設計圖,
這樣工人才能根據那張設計圖知道房子要怎麼蓋。
那張房子的設計圖就好比是「program」。(以電腦語言來說就是「程式碼本身」)

那現在設計圖已經畫好了,
實際進行蓋房子的工人就好比是「thread」。(以電腦語言來說: thread 是 OS 能夠進行排程的最小單位,安排說何時換哪個工人工作,何時哪個工人去休息,輪班制的感覺)
蓋房子通常不會只有一個工人,
由一群工人組成的一個建築團隊就好比是「process」。

我們從這個比喻來理解底下這幾句話吧:

  • OS可以管理很多支process (好比說一間建築公司底下可以有多個團隊)
  • 一支process裡面可以包含很多支thread (一個團隊裡可以有多個工人)
  • thread 是 OS 分配 CPU 時間的對象 (好比說主管決定每個工人的工作時程安排)
  • process 是 OS 分配資源的對象 (好比說同一個工作團隊的資源是共享的)

以電腦上的實際例子說說什麼時候用process?什麼時候用thread

好比說,「聊天室」是一支process,可以讓你跟你朋友互傳訊息聊天,
那麼這支process便可以設計兩支thread負責不同功能,
一支thread負責「將你的訊息發送出去」,
一支thread負責「接收別人傳來的訊息」。

融會貫通: 可能不恰當的例子,「小算盤」與「加減乘除」

https://ithelp.ithome.com.tw/upload/images/20191219/20117114Epg7cKlvUZ.png

「小算盤」是電腦上蠻廣為人知的一支小程式,
用來做簡單的數學運算。
在網上看到有人舉例說: 「小算盤」是一支process,「加減乘除」各是一支thread。
小馬覺得這個例子相當不恰當,
之所以需要寫多個thread,是因為我們想要讓程式同時執行,
比如聊天室分兩個thread,
讓你同時可以「發送訊息」跟「接收訊息」,
總不可能說我一定要先收到一條訊息才能夠發送訊息。

但「小算盤」這例子便不同了,
並沒有同步執行的問題,
要計算加減乘除的話也是使用者一行一行的打指令。
如果真的把「加減乘除」寫在不同的四個thread,
感覺上就像是四個工人A, B, C, D,
A只會做加法,
B只會做減法,
C只會做乘法,
D只會做除法。
然後四個工人可以同時工作。
但這樣感覺就很難處理使用者要做同時有四則運算的需求: 如「1+2-3*2」的計算。

先寫到這邊吧,
本文以生活化的例子與電腦上常見的例子,
讓讀者們容易明白program, process, thread的差異,
在此系列文的下一篇,就來實際談一下恐龍書上user thread 與kernal thread的用途。

參考資料:

  1. Program/Process/Thread 差異
  2. OS - Ch4 多執行緒 Multithread Programming

尚未有邦友留言

立即登入留言