91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node的事件循環是什么

發布時間:2023-04-07 09:33:57 來源:億速云 閱讀:125 作者:iii 欄目:web開發

這篇文章主要介紹“Node的事件循環是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Node的事件循環是什么”文章能幫助大家解決問題。

一、什么是事件循環

一句話:事件循環是Nodejs處理異步操作的機制。

Js是單線程的,為什么Nodejs就能處理異步操作?

因為Nodejs把多線程的操作交給了系統內核。

上圖:

Node的事件循環是什么

Node的事件循環是什么

Nodejs就像一個聰明的小孩,基于Js的它本身無法實現多線程操作,但是它把多線程的操作丟給了系統內核。

因為系統內核大部分都是多線程的,內核執行起來那不是so easy,那Nodejs就高枕無憂了嘛?

二、為什么需要事件循環

(先解釋一下事件循環這個名稱,Nodejs是事件驅動的,當什么時候 做什么事情,做的事情就定義在回調函數中;

因此可以將回調函數定義為事件處理函數;所以管理回調函數的機制叫做事件循環;)

既然內核那么強大,Nodejs無事一身輕?

非也,內核執行完畢之后,Nodejs總得執行對應的回調函數吧。

所以就需要一個機制幫助它管理、維護這些異步操作回調函數,防止它們打架啊、亂串啊。

從而以一種高效的方式執行。所以這就是為什么需要---事件循環---。

Node的事件循環是什么

總結:事件循環是Nodejs用來控制異步代碼回調執行順序的!

三、怎樣理解事件循環

口訣一:同步任務總是比異步任務執行更早;

異步API分類

同步任務無需多言,這里先將Nodejs中的異步API進行分類:

Node的事件循環是什么

簡單理解,針對上述三種異步API,事件循環內部提供了3種隊列,

Node的事件循環是什么

奇怪?為什么沒有process.nectTick?

哈哈,那是因為process.nectTick本身就很奇怪!

process.nectTick

雖然process.nectTick屬于異步API,但是卻不屬于事件循環的一部分。

上圖:

Node的事件循環是什么

這里就牽涉到另一個概念:異步模塊!

異步模塊

Node的事件循環是什么

就是這個神奇的家伙,nodejs使用libuv庫調用內核,實現多線程的操作!

那這個跟process.nectTick有幾毛錢關系?

有,因為process.nectTick可以理解為異步模塊的一部分。

Node的事件循環是什么

因此,process.nectTick總會在事件循環之前被調用!

口訣二:process.nectTick是所有異步任務里面最快執行的;

(注:理解Tick

Node的事件循環是什么

事件循環3種隊列運行一周,成為一個Tick!)

好,明白了!

等等......好像還缺少了什么?Promise又是怎么執行的?

Promise

除了nextTick隊列,還有一種特殊的隊列:微任務隊列。微任務隊列,主要就是用來處理Promise回調函數的執行。

那微任務隊列的執行順序又是怎樣的呢?

上圖:

Node的事件循環是什么

口訣三:微任務隊列追加在process.nectTick隊列后面,事件循環的前面;

上面講了這么多,整體看下

Node的事件循環是什么

口訣四:實踐出真知;

利用上面的理論,聰明的你,能分析一下最終的打印順序嘛?

console.log('同步代碼')setImmediate(() => {    console.log('setImmediate');})setTimeout(() => {    console.log('setTimeout');}, 100)Promise.resolve().then(() => {    console.log('promise');})process.nextTick(() => {    console.log('Tick');})復制代碼

關于“Node的事件循環是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连江县| 灵台县| 清河县| 东阿县| 城步| 全州县| 丹江口市| 扶沟县| 运城市| 广州市| 静安区| 景宁| 全南县| 宕昌县| 临西县| 蕉岭县| 北川| 界首市| 南昌县| 双桥区| 体育| 锡林浩特市| 辛集市| 上杭县| 遂平县| 浦城县| 东辽县| 桦南县| 东乌珠穆沁旗| 资溪县| 新巴尔虎左旗| 揭西县| 阳原县| 庄浪县| 武宁县| 乌兰察布市| 民乐县| 安陆市| 张家港市| 酒泉市| 常熟市|