一、如何理解JS的單線程
JS 在同一時間段只能做一件事
JS 同步是單線程,異步可以實現多進程
二、理解任務隊列
js 是一門單線程語言,這就意味着所有任務都需要排隊,前一個任務結束,后一個任務才會開始。所以就有了 同步任務 和 異步任務。
同步任務指的是,在主線程上排隊執行的任務,前一個任務結束,才會開始執行下一個任務;
異步任務指的是,不進入主線程,而進入一個“任務隊列”,只有“任務隊列”通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行,而且可以執行多個任務,不會造成阻塞。
三、理解事件循環 Event Loop
異步執行的運行機制如下:
1.所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。
2.主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。
3.一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,於是結束等待狀態,進入執行棧,開始執行。
主線程不斷重復上面的第三步。
主線程從"任務隊列"中讀取事件,這個過程是循環不斷的,所以整個的這種運行機制又稱為Event Loop(事件循環)。只要主線程空了,就會去讀取"任務隊列",這就是JavaScript的運行機制。