node.js事件輪詢(xún)機(jī)制原理知識(shí)點(diǎn)
借助libuv庫(kù)實(shí)現(xiàn)的
概括事件輪詢(xún)機(jī)制:分為六個(gè)階段
1.timers 定時(shí)器階段
計(jì)時(shí)和執(zhí)行到點(diǎn)的定時(shí)器回調(diào)函數(shù)
2.pending callbacks
某些系統(tǒng)操作(例如TCP錯(cuò)誤類(lèi)型)
3.idle,prepare
4.poll輪詢(xún)階段(輪詢(xún)隊(duì)列)
如果輪詢(xún)隊(duì)列不為空,依次同步取出輪詢(xún)隊(duì)列中第一個(gè)回調(diào)函數(shù),直到輪詢(xún)隊(duì)列為空或者達(dá)到系統(tǒng)最大限制
如果輪詢(xún)隊(duì)列為空
如果之前設(shè)置過(guò)setImmediate函數(shù),直接進(jìn)入下一個(gè)check階段,如果之前沒(méi)有設(shè)置過(guò)setImmediate函數(shù),在當(dāng)前 poll階段等待,直到輪詢(xún)隊(duì)添加回調(diào)函數(shù),就會(huì)去第一個(gè)情況執(zhí)行,如果定時(shí)器到點(diǎn)了,他也會(huì)去下一個(gè)階段
5.check查階段
執(zhí)行setImmediate設(shè)置的回調(diào)函數(shù)
6.close callbacks關(guān)閉階段
close事件回調(diào)函數(shù)
process.nextTick()的意思就是定義出一個(gè)動(dòng)作,pengd并且讓這個(gè)動(dòng)作在下一個(gè)事件輪詢(xún)的時(shí)間點(diǎn)上執(zhí)行。能在任意階段優(yōu)先執(zhí)行
以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
相關(guān)文章
node.js實(shí)現(xiàn)逐行讀取文件內(nèi)容的代碼
這篇文章主要介紹了node.js實(shí)現(xiàn)逐行讀取文件內(nèi)容的代碼,本文還介紹了一個(gè)node.js的按行讀取內(nèi)容開(kāi)源項(xiàng)目,需要的朋友可以參考下2014-06-06nodejs對(duì)項(xiàng)目下所有空文件夾創(chuàng)建gitkeep的方法
這篇文章主要介紹了nodejs對(duì)項(xiàng)目下所有空文件夾創(chuàng)建gitkeep的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08利用Node.js如何實(shí)現(xiàn)文件循環(huán)覆寫(xiě)
這篇文章主要給大家介紹了關(guān)于利用Node.js如何實(shí)現(xiàn)文件循環(huán)覆寫(xiě)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作,本系列文章會(huì)教你一步一步創(chuàng)建一個(gè)完整的服務(wù)器,要的朋友可以參考下2014-12-12