# Process & Thread ## Program (程式) Program 意旨軟體工程師所寫的程式碼 (code) 的集合,也就是還尚未 load 進記憶體的程式碼,存放在次級儲存裝置 (secondary storage)。 :::danger **總結**: - 一個 Program 可以執行多次,同時產生多個 Process。 ::: ## Process (行程,亦可稱作處理程序、進程) Process 意旨已經執行並且 load 到記憶體中的 Program,行程中的每一行程式碼隨時都有可能被 CPU 執行。 在實際生活中,點開應用程式就是將 Program 活化成 Process,我們在活動監控器 (mac) 或 jobs (linux) 中看到的 PID,也就是執行中的 ProcessID。 每一個 Process 又由下面兩項組成: - 一個 **Memory Space**。相當於 Object 的 variable,不同 Process 的 Memory Space 也不同,彼此看不到對方的 Mempry Space。 - 一個以上的 **Thread**。 :::danger **總結**: - Process 是電腦中已執行 Program 的實體,每一個 Process 互相獨立。 - Process 需要一些資源才能完成工作,如 CPU、記憶體、檔案以及 I/O 裝置。 - **Process 不是基本執行單位,而是 Thread (執行緒) 的容器。** - 每個 Process 由一個 Memory Space 和一個以上的 Thread 所組成。 ::: ## Thread (執行緒,亦可稱作線程) 前面有提到 Process 是 Thread 的容器,在同一個 Process 中會有很多個 Thread,每一個 Thread 負責某一項功能。 每一個 Thread 又由下面兩項組成: - Stack: 紀錄從某個起始點開始 (例如 main),到目前為止所有函數的呼叫路徑,以及在這些呼叫路徑上所用到的區域變數。 - 紀錄 CPU 內部的暫存器 (如 Program Counter, Stack Pointer, Program Status Word 等) 的狀態。 :::success 在多執行緒中 (Multithreading),兩個執行緒若同時存取或改變全域變數 (Global Variable),可能會發生同步 (Synchronization) 問題。若執行緒之間互搶資源,則可能產生死結 (Deadlock)。 ::: :::danger **總結:** - Thread 是系統處理工作的基本單元。 - 一個 Process 會同時存在多個 Thread。 - 一個 Process 底下的 Thread 共享資源,如記憶體、全域變數 (Global Variable) 等,不同的 Process 則否。 - 同一個 Process 內的 Thread 使用相同的 Memory Space,但這些 Thread 各自擁有其 Stack。也就是說,Thread 能透過 reference 存取到相同的 Object,但是 local variable 各自獨立。 - 作業系統 (OS) 會根據 Thread 的優先權以及使用過的 CPU 時間,在不同的 Thread 作切換,讓各自 Thread 都有執行的機會。 ::: ## Multi-threading vs Multi-processing 一間工廠 (Process) 需要員工 (Thread) 去操作才能生產產品。以電腦分時運作架構來看,不同的行程就像是不同的工廠,而執行緒則像是員工一樣,由作業系統負責調度他在什麼時間該去哪家工廠上班。 如果電腦擁有多個處理核心,即代表系統可以同時調用的員工數目增加,如此一來系統在為執行緒安排工作時就有兩種策略: 1. 在同一時間內為各家工廠都分配一個員工去做事,這種方式稱作**多行程 (Multi-processing)** 平行執行。跟單一行程處理比起來,其優點在於**可以在相同的時間內完成較多的工作**。 2. 在同一時間內把所有員工都派到同一家工廠去工作,此法稱作**多執行緒 (Multi-threading)** 平行執行。相較於單一執行緒處理方式,它**有機會讓相同工作在比較短的時間內完成**。 ### Multi-processing (多行程) 指多個 Process 在執行,彼此有各自的資料空間,若有資料需要共用,必須採用特別的方法來傳遞 (視 OS 而定)。 由於每個 Process 都需要一些資源來工作,所以 Multi-process 會比 Multi-thread 更消耗資源。 ### Multi-threading 指一個 Process 裡有多個執行緒在執行,彼此共用相同的資料空間。 多執行緒工作的其中一項特點就是隸屬在同一行程下的所有執行緒會分享該行程的所有資源,此外各執行緒彼此間也可以擁有自己私有的資源而不與其他同一行程內的執行緒共用。 ## 參考資料 - [【恐龍】理解 Process & Thread](https://medium.com/erens-tech-book/%E7%90%86%E8%A7%A3-process-thread-94a40721b492)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up