2/07/2017

Processes and Threads

相信這兩者差別,只要是做系統的人應該都會很了解。但對於我而言,卻相當模糊。記得有次在跟老外同學閒聊的時候,他問我這兩者的差別是在哪 ? 在當下我突然發現,要講給人懂是一件很困難的事,尤其是在對某個東西半理解狀態,更難解釋。所以這篇文章就來淺淺的探討有關這兩者間的區別。

在現今每個人幾乎都有智慧型手機,而且可以同時執行超多程式,像是你在玩遊戲的同時,能夠接收到朋友的訊息、郵件或其它通知訊息。就跟在用桌機或筆電一樣,可以同時開啟好幾個應用程式。簡單來說,Process 就是 Program,就是一個應用程式,像是在手機上的 App,電腦上的 MicroSoft Word;而  Thread 就是這個 Process 裡面的一個單位執行緒 ( Unit of execution) ,如果打開了 MicroSoft Word (Process),裡面的就有很多個Threads 在跑,像是 keyboard, print, save ...etc,就這是所謂的 Multiple-thread application。

Background
在談到Process和thread,或是說運行一個App,有三個非常重要的東西來負責管理:CPU, Memory (RAM), Memory controller。Memory controller 是一個介於CPU和RAM的界面,負責傳輸Data到CPU。當我們寫好一個程式,然後compile成binary code,這些binary code就會存放在RAM,接著透過 controller 把 data 傳到CPU。CPU內部有一個 queue line,也就是pipe line,依照FILO的原則放進這line當中來等待執行。

Multiple-thread application
那到底是如何實現multiple thread和multiple process ? 以Linux為例子,每一個process都會有PID, memory space, priority 和 schedule,依據priority和schedule來切換所有processes,這切換時間就叫 time slot,通常是在 1ms。

而一個process又有多個threads,這些threads 一般都是來靠 "鎖" (Lock) 來管理。如果這鎖沒管理好,很容易造成這個process當掉,更嚴重則是系統崩潰。像是我們常聽到 "死鎖" (Dead Lock) 就是因為 Thread 1 等待 Thread 2,而 Thread 2 又等待 Thread 1 釋放鎖而造成死循環。所以如何設計好這些threads 對於一個program or process 是非常重要的。

No comments:

Post a Comment