国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

淺析Js Event Loop

forrest23 / 2640人閱讀

摘要:一旦為空事件循環(huán)將檢查,如果一個或多個定時器準備就緒,事件循環(huán)將回繞到階段以執(zhí)行那些的回調(diào)。此階段允許人員在輪詢階段完成后立即執(zhí)行回調(diào)。否則它將通過發(fā)射。

什么是Event Loop?

官網(wǎng)解釋

個人理解是js的單線程是他的任務棧是單線程,但他處理異步i/o的方法是依賴libuv開啟線程池去處理,完成之后任務加到poll queue里,然后等任務棧的任務為空或事件到達閥值時,把poll queue和定時器的任務加到任務棧里,繼續(xù)這個循環(huán),這就是大體上的js的Event Loop。

結(jié)構(gòu)

   ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<─────┤  connections, │
│  └─────────────┬─────────────┘      │   data, etc.  │
│  ┌─────────────┴─────────────┐      └───────────────┘
│  │           check           │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
└──┤      close callbacks      │
   └───────────────────────────┘

timer:
定時任務,當?shù)竭_閥值時,他不會立即執(zhí)行,會等待任務棧的任務會阻塞他。

pending callbacks:
此階段執(zhí)行某些系統(tǒng)操作(例如TCP錯誤類型)的回調(diào)。例如,如果TCP套接字在嘗試連接時收到,則某些*nix系統(tǒng)希望等待報告錯誤。這將排隊等待在掛起的回調(diào)階段執(zhí)行。

pull:
這個階段有兩個主要功能:
計算它應該阻塞和輪詢I / O的時間,然后
處理輪詢隊列中的事件。
當事件循環(huán)進入輪詢階段并且沒有計劃定時器時,將發(fā)生以下兩種情況之一:

如果輪詢隊列不為空,則事件循環(huán)將遍歷其同步執(zhí)行它們的回調(diào)隊列,直到隊列已用盡,或者達到系統(tǒng)相關(guān)的硬限制。

如果輪詢隊列為空,則會發(fā)生以下兩種情況之一:

如果腳本已執(zhí)行setImmediate,則事件循環(huán)將結(jié)束poll階段并繼續(xù)執(zhí)行check階段以執(zhí)行這些調(diào)度腳本。

如果腳本沒有執(zhí)行setImmediate,事件循環(huán)將等待回調(diào)被添加到poll queue中,然后立即執(zhí)行。

一旦poll queue為空事件循環(huán)將檢查timer,如果一個或多個定時器準備就緒,事件循環(huán)將回繞到timer階段以執(zhí)行那些timer的回調(diào)。

check
此階段允許人員在輪詢階段完成后立即執(zhí)行回調(diào) 。如果輪詢階段變?yōu)榭臻e并且存在setImmediate任務,那么事件循環(huán)直接跳到check執(zhí)行而不是阻塞在poll階段等待回調(diào)被加入。

setImmediate實際上是一個特殊的計時器,它在事件循環(huán)的一個多帶帶階段運行。它使用libuv API來調(diào)度在輪詢階段完成后執(zhí)行的回調(diào)。

close callbacks

如果socket或handle突然關(guān)閉(例如socket.destroy()),則該 "close"事件將在此階段發(fā)出。否則它將通過發(fā)射process.nextTick()。

引用:

https://nodejs.org/en/docs/gu...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102988.html

相關(guān)文章

  • 淺析 JS 中的 EventLoop 事件循環(huán)(新手向)

    摘要:同時,如果執(zhí)行的過程中發(fā)現(xiàn)其他函數(shù),繼續(xù)入棧然后執(zhí)行。上面我們討論的其實都是同步代碼,代碼在運行的時候只用調(diào)用棧解釋就可以了。 序 Event Loop 這個概念相信大家或多或少都了解過,但是有一次被一個小伙伴問到它具體的原理的時候,感覺自己只知道個大概印象,于是計劃著寫一篇文章,用輸出倒逼輸入,讓自己重新學習這個概念,同時也能幫助更多的人理解它~ 概念 JavaScript 是一門 ...

    chadLi 評論0 收藏0
  • 淺析 JS 事件循環(huán)之 Microtask 和 Macrotask

    摘要:常見應用則是為了完成一些更新應用程序狀態(tài)的較小的任務,如處理的回調(diào)和的修改,以便讓這些任務在瀏覽器重新渲染之前執(zhí)行。常見應用執(zhí)行順序的實現(xiàn)需要至少一個和至少一個。 簡介 我們在上一篇 《淺析 JS 中的EventLoop 事件循環(huán)》 中提到一個 Event Queue,其實在事件循環(huán)中 queue 一共有兩種,還有一種叫 Job Queue 其中 Event Queue 在 HTML...

    sihai 評論0 收藏0
  • js_Event Loop(筆記)

    摘要:單線程的好處簡單,處理時不會出現(xiàn)并發(fā)競爭問題異步的必要性讓用戶體驗更流暢如何實現(xiàn)異步見參考,,調(diào)用棧函數(shù)執(zhí)行上下文。單線程只能有一個并且每次只能執(zhí)行一個任務。 參考: JavaScript 運行機制詳解:再談Event Loop 深入理解JavaScript的執(zhí)行過程--單線程的JS 細說JavaScript單線程的一些事 The JavaScript Event Loop: Exp...

    liaoyg8023 評論0 收藏0
  • Node.js淺析高并發(fā)與分布式集群

    摘要:而在單線程環(huán)境下,繞不過錯誤就意味著導致應用退出,重啟恢復的間隙會導致服務中斷,這是我們不愿意看到的。這也是支持高并發(fā)的重要原因之一實際上不光是操作,的絕大多數(shù)操作都是以這種異步的方式進行的。 本文首發(fā)于我的個人博客: kmknkk.xin 不足之處歡迎斧正! Node特性:高并發(fā) 在解釋node為什么能夠做到高并發(fā)之前,不妨先了解一下node的其他幾個特性: 單線程 我們先來明確...

    Lin_YT 評論0 收藏0
  • Event Loop - JS執(zhí)行機制

    摘要:心塞塞根據(jù)規(guī)范,事件循環(huán)是通過任務隊列的機制來進行協(xié)調(diào)的。等便是任務源,而進入任務隊列的是他們指定的具體執(zhí)行任務回調(diào)函數(shù)。然后當前本輪的結(jié)束,主線程可以繼續(xù)取下一個執(zhí)行。 依然是:經(jīng)濟基礎決定上層建筑。 說明 首先,旨在搞清常用的同步異步執(zhí)行機制 其次,暫時不討論node.js的Event Loop執(zhí)行機制,以下關(guān)于瀏覽器的Event Loop執(zhí)行機制 最后,借鑒了很多前輩的研究文...

    muddyway 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<