1. 程式人生 > >瀏覽器中的異步事件輪詢機制

瀏覽器中的異步事件輪詢機制

系統 優先級 隊列優先級 ise 多線程 如果 rom 代碼 操作

JavaScript 是一門單線程語言,之所以說是單線程,是因為在瀏覽器中,如果是多線程,並且兩個線程同時操作了同一個 Dom 元素,那最後的結果會出現問題。所以,JavaScript 是單線程的,但是如果完全由上至下的一行一行執行代碼,假如一個代碼塊執行了很長的時間,後面必須要等待當前執行完畢,這樣的效率是非常低的,所以有了異步的概念,確切的說,JavaScript 的主線程是單線程的,但是也有其他的線程去幫我們實現異步操作,比如定時器線程、事件線程、Ajax 線程。

1.所有的同步任務都在主線程上執行,形成一個執行棧 2.主線程之外,還存在一個`任務隊。只要異步任務有了運行結果,就在`任務隊列`之中放置一個事件。 3.一旦執行棧中的所有同步任務執行完畢,系統就會讀取`任務隊列`看看裏面有些什麽事件,那些對應的異步任務就結束等待狀態,進入執行棧,開始執行 4.主線程不斷重復上面的第三步,只要主線程空了,就會讀取`任務隊列`這就是javascript的運行機制,這個過程會不斷重復。(該過程又稱為事件輪詢) 5.在js中的 ES6的任務隊列比循環中的任務隊列優先級要高,promise則屬於ES6的任務隊列,所以根據其優先級,系統執行完同步任務之後,最先進入執行棧的是promise,其次才是循環中的任務事件

瀏覽器中的異步事件輪詢機制