Skip to content

Event Loop #29

@shiaoyi

Description

@shiaoyi

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裡,再執行

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions