非同步任務指的是,不進入主線程、而進入"任務佇列"(task queue)的任務,只有"任務佇列"通知主線程,某個非同步任務可以執行了,該任務才會進入主線程執行。
所有同步任務都在主線程上執行,形成乙個執行棧(execution context stack)。
主線程之外,還存在乙個"任務佇列"(task queue)。只要非同步任務有了執行結果,就在"任務佇列"之中放置乙個事件。
一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務佇列",看看裡面有哪些事件。那些對應的非同步任務,於是結束等待狀態,進入執行棧,開始執行。
主線程不斷重複上面的第三步
"任務佇列"是乙個先進先出的資料結構,排在前面的事件,優先被主線程讀取。主線程的讀取過程基本上是自動的,只要執行棧一清空,"任務佇列"上第一位的事件就自動進入主線程。但是,由於存在後文提到的"定時器"功能,主線程首先要檢查一下執行時間,某些事件只有到了規定的時間,才能返回主線程。
主線程執行的時候,產生堆(heap)和棧(stack),棧中的**呼叫各種外部api,它們在"任務佇列"中加入各種事件(click,load,done)。只要棧中的**執行完畢,主線程就會去讀取"任務佇列",依次執行那些事件所對應的**函式。
js事件迴圈 事件輪詢 event loop
總結了網上的一些有關event loop的資料 雖然負責解釋和執行js 的執行緒只有1個,但是瀏覽器內部還有其他執行緒來專門負責非同步任務的,比如定時器,ui,事件,網路等專門執行緒來負責相關任何的處理。step1 主線程讀取js 此時為同步環境,形成相應的堆和執行棧 step2 主線程遇到非同步任...
UI rendering在事件輪詢中的執行順序
先執行同步 取出乙個巨集任務 執行所有微任務 本輪完畢 ui render 執行下乙個巨集任務 下輪開始 執行下乙個所有微任務 下輪完畢 ui render 執行下乙個巨集任務 下下輪開始 根據html standard,一輪事件迴圈執行結束之後,下輪事件迴圈執行之前開始進行ui render。即 ...
js中的事件機制及事件
1.事件 js和html之間的互動是通過事件來實現的。事件描述的是文件或瀏覽器特定的互動瞬間。2.事件流 描述的是從頁面中接收事件的順序。包括 ie事件冒泡流和netscape事件捕獲流。事件冒泡流是指從最具體節點出發依次往上走到較不具體的節點。事件捕獲流是指從較不太確定的節點出發到最具體的節點。d...