Program/Process/Thread 是作業系統(Operating System)很重要的概念,同時也是新鮮人面試時經常會被問到的題目。
相同 Program 的 Process 可以多個同時存在。
Program 意旨軟體工程師在 IDE、editor等所寫的程式碼(code),也就是說還尚未load入記憶體的 code,我們稱之為Program。我們也可以想像成軟體開發者就如同建築師,要設計一座工廠,而這座工廠要如何建造、規劃的藍圖就是 Program。
Process 意旨已經執行並且 load 到記憶體中的 Program ,程序中的每一行程式碼隨時都有可能被CPU執行。在實際生活中,點開應用程式就是將 Program 活化成 Process ,因此我們可以在活動監控器(mac)中看到PID,也就是執行中的Process 。連結 Program 的想像,Process 就是實體的工廠,照著 Program 這張設計藍圖所完成的工廠。
以下條列幾點 Process 的觀念 —
前面有提到 Process 是 Thread 的容器,在同一個 Process 中會有很多個 Thread ,每一個 Thread 負責某一項功能。以聊天室 Process 為例,可以同時接受對方傳來的訊息以及發送自己的訊息給對方,就是同個 Process 中不同 Thread的功勞。連結 Program 、Process 的想像,Thread 就是工廠內的工人,確保工廠的每項功能,並且共享工廠內的每一項資源。
以下條列幾點 Thread 的觀念 —
JS在執行時依舊是依照同步的概念,按照順序一個一個任務執行,但遇到非同步任務時,會把他往後放,放到事件佇列(Event Queue)中。
Note: 這邊就算把setTimeout的時間改為0秒,setTimeout也不會先執行,會被往後放到event queue裡面。
一直到等到離開doWork這個執行環境後,才會執行setTimeout這個非同步任務。console.log的順序如下圖,漂亮阿姨回電會是最後一個被印出來的 (這邊已經把setTimeout秒數改為0)。
setTimeout
和setInterval
是JavaScript裡面唯二天生就以非同步方式執行的function。