iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Software Development

用作業系統讀懂另一半的OS系列 第 8

【2025鐵人賽】用作業系統讀懂另一半的OS:Threads & Concurrency 01

  • 分享至 

  • xImage
  •  

前面我們談完Process,接下來我們來說Thread~~~

Thread 基本概念

Process是一個正在執行的程式,是作業系統資源分配的基本單位。每個 Process 都擁有獨立的記憶體空間、開啟的檔案描述符、程式計數器、暫存器狀態等。而Thread(執行緒)是一個 Process 內部的更小執行單位,負責實際執行指令流程。它們共享同一個 Process 的資源(例如記憶體、開啟檔案、全域變數),但有自己獨立的堆疊(Stack)和程式計數器(PC)。

Process(行程)就像是一場比賽:一個比賽就佔用整個操場(CPU)。
Thread(執行緒)就是比賽中的選手:一場比賽可以只有一位選手,也可以有很多選手同時跑不同的賽道。

所以說,一個Thread裡面包含:

  • Thread ID:唯一識別編號
  • Program Counter:程式計數器,記錄下一個執行的指令
  • Register Set:暫存器組(CPU 狀態)
  • Stack:堆疊(函式呼叫、區域變數)

單一執行緒 vs 多執行緒如下表所示:

https://ithelp.ithome.com.tw/upload/images/20250724/20177764GBIrA18sKN.png

多核心程式設計(Multicore Programming)

現在我們在買電腦時,CPU當中強調的8核心、16核心,其實這些核心,就是同時幫你做事的小幫手們。那如果你只派給他們一個任務,其實就相當于浪費掉很多CPU的效能。

Concurrency vs Parallelism

在此之前,我們先搞懂兩個重要名詞:

  • Concurrency(併發):多個任務能交錯執行,看起來同時在跑(單核心也可以達成)
  • Parallelism(平行):多個任務真的同時在跑(多核心才能實現)

這邊用兩張恐龍本的圖來表示一下~~
第一張是單核心上的併發(看似同時,實則輪流)
第二張是多核心上的平行處理(真的同時跑)

https://ithelp.ithome.com.tw/upload/images/20250726/20177764Klfs1MSdbr.png

https://ithelp.ithome.com.tw/upload/images/20250726/20177764NmkMpApRWB.png

Multithreaded Programming vs Multicore Programming

噗呲,J個也算硬插進來的話題,也是被問到不知道怎麼說ww
https://ithelp.ithome.com.tw/upload/images/20250805/20177764UCgZE21aZt.jpg

Multicore Programming(多核心程式設計)是屬於硬體與排程層面的問題。指程式設計時考慮到硬體中存在多個 CPU 核心 (Core),嘗試有效分配運算到不同核心,實現真正的平行處理(parallelism)。J個是涉及 thread binding、cache coherence、核心負載平衡等。

而Multithreaded Programming(多執行緒程式設計)是屬於程式設計層面的概念。指一個程式內部啟動多個Thread同時工作。這些Thread可能Concurrency,也可能Parallelism。總之就是來提升效率、資源共享、回應速度。Multithreaded的好處如下:

  • 反應速度(Responsiveness):使用者操作不中斷,程式更即時互動,例如按下按鈕還能繼續使用介面
  • 資源共享(Resource Sharing):同一個 process 中的 threads 天生就能共享資料、變數與資源
  • 經濟效益(Economy):thread 比 process 更輕便,建立與切換成本更低
  • 可擴展性(Scalability):在多核心系統上,執行緒可平行運作,效能提升更明顯

然而,理想是美好,現實總是骨感的。我們就來談談Multithreaded常見的五大挑戰:

第一,任務分解(Identifying Tasks)。我們需要把程序(Process)拆成多個小任務(thread),而且這些任務要能獨立執行才行。

第二,Process拆分後,就會需要考量每一個Thread的工作平衡(Balance):每個 thread 工作量要平均,不能一人爆肝、別人耍廢。否則會出現「其中一核心超忙,其他核心閒到發呆」的情況。

第三,資料切分(Data Splitting):不只任務要分,資料也要分!讓每個核心各處理自己的那一塊,減少互搶資源。

第四,資料相依(Data Dependency):如果 thread A 需要 thread B 的結果,那 A 就得等 B,這會讓平行變「卡頓」。這種「你等我我等你」的情況,要靠同步機制來處理。

第五,測試與除錯(Testing & Debugging):多執行緒的錯誤難抓!bug 可能只在某個時間點、某個執行順序才出現,叫做「難以重現的地雷」。測試與除錯會比單執行緒程式更複雜。

希望這樣有幫助大家對於名詞解釋有更深的理解~
https://ithelp.ithome.com.tw/upload/images/20250805/201777643G5TCkJqpA.jpg


上一篇
【2025鐵人賽】用作業系統讀懂另一半的OS:Process 03
下一篇
【2025鐵人賽】用作業系統讀懂另一半的OS:Threads & Concurrency 02
系列文
用作業系統讀懂另一半的OS30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言