這篇文章主要介紹了JavaScript中Event Loop指的是什么,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
目前創新互聯建站已為千余家的企業提供了網站建設、域名、雅安服務器托管、網站托管、企業網站設計、云龍網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
什么是Event Loop?
js的單線程是他的任務棧是單線程,但他處理異步i/o的方法是依賴libuv開啟線程池去處理,完成之后任務加到poll queue里,然后等任務棧的任務為空或事件到達閥值時,把poll queue和定時器的任務加到任務棧里,繼續這個循環,這就是大體上的js的Event Loop。
結構
┌───────────────────────────┐ ┌─>│ timers │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ pending callbacks │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ idle, prepare │ │ └─────────────┬─────────────┘ ┌───────────────┐ │ ┌─────────────┴─────────────┐ │ incoming: │ │ │ poll │<─────┤ connections, │ │ └─────────────┬─────────────┘ │ data, etc. │ │ ┌─────────────┴─────────────┐ └───────────────┘ │ │ check │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ └──┤ close callbacks │ └───────────────────────────┘
timer:
定時任務,當到達閥值時,他不會立即執行,會等待任務棧的任務會阻塞他。
pending callbacks:
此階段執行某些系統操作(例如TCP錯誤類型)的回調。例如,如果TCP套接字在嘗試連接時收到,則某些*nix系統希望等待報告錯誤。這將排隊等待在掛起的回調階段執行。
pull:
這個階段有兩個主要功能:
計算它應該阻塞和輪詢I / O的時間,然后
處理輪詢隊列中的事件。
當事件循環進入輪詢階段并且沒有計劃定時器時,將發生以下兩種情況之一:
如果輪詢隊列不為空,則事件循環將遍歷其同步執行它們的回調隊列,直到隊列已用盡,或者達到系統相關的硬限制。
如果輪詢隊列為空,則會發生以下兩種情況之一:
如果腳本已執行setImmediate,則事件循環將結束poll階段并繼續執行check階段以執行這些調度腳本。
如果腳本沒有執行setImmediate,事件循環將等待回調被添加到poll queue中,然后立即執行。
一旦poll queue為空事件循環將檢查timer,如果一個或多個定時器準備就緒,事件循環將回繞到timer階段以執行那些timer的回調。
check
此階段允許人員在輪詢階段完成后立即執行回調 。如果輪詢階段變為空閑并且存在setImmediate任務,那么事件循環直接跳到check執行而不是阻塞在poll階段等待回調被加入。
setImmediate實際上是一個特殊的計時器,它在事件循環的一個單獨階段運行。它使用libuv API來調度在輪詢階段完成后執行的回調。
close callbacks
如果socket或handle突然關閉(例如socket.destroy()),則該 'close'事件將在此階段發出。否則它將通過發射process.nextTick()。
感謝你能夠認真閱讀完這篇文章,希望小編分享JavaScript中Event Loop指的是什么內容對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,遇到問題就找創新互聯,詳細的解決方法等著你來學習!
文章標題:JavaScript中EventLoop指的是什么
文章地址:http://newbst.com/article26/jhspjg.html
成都網站建設公司_創新互聯,為您提供App開發、移動網站建設、Google、商城網站、網站導航、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯