這篇文章主要介紹“Node的事件循環(huán)是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Node的事件循環(huán)是什么”文章能幫助大家解決問題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了周口免費建站歡迎大家使用!
一句話:事件循環(huán)是Nodejs處理異步操作的機制。
Js是單線程的,為什么Nodejs就能處理異步操作?
因為Nodejs把多線程的操作交給了系統(tǒng)內(nèi)核。
上圖:


Nodejs就像一個聰明的小孩,基于Js的它本身無法實現(xiàn)多線程操作,但是它把多線程的操作丟給了系統(tǒng)內(nèi)核。
因為系統(tǒng)內(nèi)核大部分都是多線程的,內(nèi)核執(zhí)行起來那不是so easy,那Nodejs就高枕無憂了嘛?
(先解釋一下事件循環(huán)這個名稱,Nodejs是事件驅(qū)動的,當(dāng)什么時候 做什么事情,做的事情就定義在回調(diào)函數(shù)中;
因此可以將回調(diào)函數(shù)定義為事件處理函數(shù);所以管理回調(diào)函數(shù)的機制叫做事件循環(huán);)
既然內(nèi)核那么強大,Nodejs無事一身輕?
非也,內(nèi)核執(zhí)行完畢之后,Nodejs總得執(zhí)行對應(yīng)的回調(diào)函數(shù)吧。
所以就需要一個機制幫助它管理、維護這些異步操作回調(diào)函數(shù),防止它們打架啊、亂串啊。
從而以一種高效的方式執(zhí)行。所以這就是為什么需要---事件循環(huán)---。

總結(jié):事件循環(huán)是Nodejs用來控制異步代碼回調(diào)執(zhí)行順序的!
同步任務(wù)無需多言,這里先將Nodejs中的異步API進行分類:

簡單理解,針對上述三種異步API,事件循環(huán)內(nèi)部提供了3種隊列,

奇怪?為什么沒有process.nectTick?
哈哈,那是因為process.nectTick本身就很奇怪!
雖然process.nectTick屬于異步API,但是卻不屬于事件循環(huán)的一部分。
上圖:

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

就是這個神奇的家伙,nodejs使用libuv庫調(diào)用內(nèi)核,實現(xiàn)多線程的操作!
那這個跟process.nectTick有幾毛錢關(guān)系?
有,因為process.nectTick可以理解為異步模塊的一部分。

因此,process.nectTick總會在事件循環(huán)之前被調(diào)用!
(注:理解Tick

事件循環(huán)3種隊列運行一周,成為一個Tick!)
好,明白了!
等等......好像還缺少了什么?Promise又是怎么執(zhí)行的?
除了nextTick隊列,還有一種特殊的隊列:微任務(wù)隊列。微任務(wù)隊列,主要就是用來處理Promise回調(diào)函數(shù)的執(zhí)行。
那微任務(wù)隊列的執(zhí)行順序又是怎樣的呢?
上圖:

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

利用上面的理論,聰明的你,能分析一下最終的打印順序嘛?
console.log('同步代碼')setImmediate(() => { console.log('setImmediate');})setTimeout(() => { console.log('setTimeout');}, 100)Promise.resolve().then(() => { console.log('promise');})process.nextTick(() => { console.log('Tick');})復(fù)制代碼
關(guān)于“Node的事件循環(huán)是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
名稱欄目:Node的事件循環(huán)是什么
轉(zhuǎn)載源于:http://www.chinadenli.net/article10/igpjgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、域名注冊、網(wǎng)站制作、網(wǎng)站營銷、營銷型網(wǎng)站建設(shè)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)