Event Loop
Process(程序)vs Thread(執行緒)
- Process 是電腦中已執行 Program 的實體
- Process 是 Thread 的容器
- 每開一個瀏覽器視窗都是一個Process
- 一個Process底下可以有很多Thread
- Thread:執行工作的單位
- 例如:可以同時接受對方傳來的訊息以及發送自己的訊息給對方,就是同個 Process 中不同 Thread 的功勞
- 若執行緒之間互搶資源,則可能產生死結(Deadlock)
瀏覽器在跑 JavaScript 的時候是 Single Thread,一次只能執行一個任務,若是碰上一個無窮迴圈,瀏覽器會不斷執行迴圈,沒辦法執行別的任務,造成瀏覽器當掉,點什麼都沒有反應
Call Stack:往下執行程式時,把要執行的function一直往stack裡疊 -> 若無法清除stack(解出function)會造成stack overflow
若一直卡在那邊怎麼辦呢?如何跑非同步的東西呢?
解法:Event Loop -> 可以設定須要長時間執行的程式,放在Web APIs裡執行,執行完會放到Callback Queue,javascript在此期間可以先執行下面程序,等Call Stack都清空,就會看Callback Queue裡有沒有東西,若有就把Callback Queue裡的東西放進Call Stack裡,再執行
Event Loop
Process(程序)vs Thread(執行緒)
瀏覽器在跑 JavaScript 的時候是 Single Thread,一次只能執行一個任務,若是碰上一個無窮迴圈,瀏覽器會不斷執行迴圈,沒辦法執行別的任務,造成瀏覽器當掉,點什麼都沒有反應
Call Stack:往下執行程式時,把要執行的function一直往stack裡疊 -> 若無法清除stack(解出function)會造成stack overflow
若一直卡在那邊怎麼辦呢?如何跑非同步的東西呢?
解法:Event Loop -> 可以設定須要長時間執行的程式,放在Web APIs裡執行,執行完會放到Callback Queue,javascript在此期間可以先執行下面程序,等Call Stack都清空,就會看Callback Queue裡有沒有東西,若有就把Callback Queue裡的東西放進Call Stack裡,再執行