Program/Process/Thread 差異


Program/Process/Thread 是作業系統(Operating System)很重要的概念,同時也是新鮮人面試時經常會被問到的題目。本篇僅只整理並簡介這三者之間的關係和概念,詳盡一步的了解與實作,則需要 OS 聖經恐龍書補足。

Program (程式)

Program 意旨軟體工程師在 IDE、editor等所寫的程式碼(code),也就是說還尚未load入記憶體的 code,我們稱之為Program。我們也可以想像成軟體開發者就如同建築師,要設計一座工廠,而這座工廠要如何建造、規劃的藍圖就是 Program。

  • 相同 Program 的 Process 可以多個同時存在。

Process ( 程序、進程 )

Process 意旨已經執行並且 load 到記憶體中的 Program ,程序中的每一行程式碼隨時都有可能被CPU執行。在實際生活中,點開應用程式就是將 Program 活化成 Process ,因此我們可以在活動監控器(mac)中看到PID,也就是執行中的Process 。連結 Program 的想像,Process 就是實體的工廠,照著 Program 這張設計藍圖所完成的工廠。

以下條列幾點 Process 的觀念 —

  • Process 是電腦中已執行 Program 的實體。
  • 每一個 Process 是互相獨立的。
  • Process 本身不是基本執行單位,而是 Thread (執行緒)的容器。
  • Process 需要一些資源才能完成工作,如 CPU、記憶體、檔案以及I/O裝置。
  • 在多功作業系統(Multitasking Operating System)中,可以同時執行數個Process ,然而一個 CPU 一次只能執行一個 Process (因此才有現在的多核處理器),而 Process 的運行量總量不會少於 CPU 的總量,又Process 會佔用記憶體,因此如何排程(Scheduling,恐龍本第五章) 、如何有效管理記憶體(恐龍本第八章)則是 OS 所關注的事。

Thread (執行緒、線程 )

前面有提到 Process 是 Thread 的容器,在同一個 Process 中會有很多個 Thread ,每一個 Thread 負責某一項功能。以聊天室 Process 為例,可以同時接受對方傳來的訊息以及發送自己的訊息給對方,就是同個 Process 中不同 Thread的功勞。連結 Program 、Process 的想像,Thread 就是工廠內的工人,確保工廠的每項功能,並且共享工廠內的每一項資源。

以下條列幾點 Thread 的觀念 —

  • 同一個 Process 會同時存在多個 Thread。
  • 同一個 Process 底下的 Thread 共享資源,如 記憶體、變數等,不同的Process 則否。
  • 在多執行緒中(Multithreading),兩個執行緒若同時存取或改變全域變數(Global Variable),則可能發生同步(Synchronization,恐龍本第六章)問題。若執行緒之間互搶資源,則可能產生死結(Deadlock,恐龍本第七章),同樣的,如何避免或預防上述兩種情況的發生,依然是 OS 所關注並改善的。