什么是事件循環(huán)
盡管JavaScript是單線程的,但通過盡可能將操作放到系統(tǒng)內(nèi)核執(zhí)行,事件循環(huán)允許Node.js執(zhí)行非阻塞I/O操作。
由于現(xiàn)代大多數(shù)內(nèi)核都是多線程的,因此它們可以處理在后臺執(zhí)行的多個操作。 當(dāng)其中一個操作完成時,內(nèi)核會告訴Node.js,以便可以將相應(yīng)的回調(diào)添加到 輪詢隊列 中以最終執(zhí)行。 我們將在本主題后面進一步詳細解釋。
事件循環(huán)解釋
當(dāng)Node.js啟動時,它初始化事件循環(huán),處理提供的輸入腳本(或放入 REPL ,本文檔未涉及),這可能會進行異步API調(diào)用,調(diào)度計時器或調(diào)用 process.nextTick() , 然后開始處理事件循環(huán)。
下圖顯示了事件循環(huán)操作順序的簡要概述。
┌───────────────────────────┐
┌─>│ timers │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ pending callbacks │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ idle, prepare │
│ └─────────────┬─────────────┘ ┌───────────────┐
│ ┌─────────────┴─────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └─────────────┬─────────────┘ │ data, etc. │
│ ┌─────────────┴─────────────┐ └───────────────┘
│ │ check │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
└──┤ close callbacks │
└───────────────────────────┘
新聞熱點
疑難解答
圖片精選