EventLoop
瀏覽器工作原理
單執行緒的含義
瀏覽器是multi-process
,一個瀏覽器只有一個Browser Process
,負責管理Tabs
、協調其他process
和Render process
存至 memory
內的 Bitmap
繪製到頁面上的(pixel
):在 Chrome 中,一個Tab
對應一個Render Process
,Render Process
是multi-thread
,其中main thread
負責頁面渲染(GUI render engine
)執行JS
(JS engine
)和event loop
; network component
可以開2-6個I/O threads
平行去處理
瀏覽器端的event loop
一個函式執行棧、一個事件佇列和一個微任務佇列
每從事件佇列中取一個事件時有微任務把微任務執行完,然後才開始執行事件
巨集任務和微任務
-
巨集任務,macrotask,也叫tasks,一些非同步任務的回撥會依次進入
macro task queue
,等待後續被呼叫,這些非同步任務包括:-
setTimeout
-
setInterval
-
setImmediate(Node獨有)
-
requestAnimationFrame(瀏覽器獨有)
-
I/O
-
UI rending (瀏覽器獨有)
-
-
微任務,
microtask
,也叫jobs
,另一些非同步任務的回撥會依次進入micro task queue
,等待後續別呼叫,這些非同步任務包括:-
process nextTick(Node 獨有)
-
Promise.then()
-
Object.observe
-
MutationObserver
注:這裡只針對瀏覽器和NodeJS
Promise建構函式裡的程式碼是同步執行的
-
Nodejs架構圖
Node.js中的Event Loop
Node.js的Event Loop過程
-
執行全域性
Script
的同步程式碼 -
執行
microtask
微任務,先執行所有Next Tick Queue
中所有任務,在執行Other Microtask Queue
中的所有任務
-
開始執行
macrotask
巨集任務,共6個階段,從第1個階段開始執行相應每一個階段macrotask
中的所有任務,注意,這裡是所有每個階段巨集任務佇列的所有任務,在瀏覽器的Event Loop
中是隻取巨集佇列的第一個任務出來執行,每一個階段的macrotask
任務執行完畢後,開始執行微任務,也就是步驟2 -
Timers Queue -> 步驟 -> I/O Queue -> 步驟2 -> Check Queue -> 步驟2 -> Close Callback Queue -> 步驟2 -> Timers Queue ......
-
這就是Node的Event Loop【簡化版】
相關文章
- 瀏覽器eventLoop和node eventLoop瀏覽器OOP
- EventLoop 的理解OOP
- eventLoop淺論OOP
- EventLoop二三事OOP
- EventLoop和EventLoopGroupOOP
- [JavaScript]js EventLoop And AsyncJavaScriptJSOOP
- Eventloop的祕密OOP
- 初識JavaScript EventLoopJavaScriptOOP
- nodejs中的eventLoopNodeJSOOP
- Netty入門(三):EventLoopNettyOOP
- EventLoop其實如此簡單OOP
- JS事件迴圈EventLoop初探JS事件OOP
- JavaScript-事件迴圈-eventLoopJavaScript事件OOP
- javascript事件迴圈機制EventLoopJavaScript事件OOP
- I/O模型、Libuv和Eventloop模型OOP
- Netty原始碼分析(五):EventLoopNetty原始碼OOP
- 我是這樣理解EventLoop的OOP
- NODE基礎總結(1) —— EventloopOOP
- node基礎(1)---eventloop事件環OOP事件
- 3個框框帶你理解EventLoopOOP
- muduo網路庫學習之EventLoop(二):程式(執行緒)wait/notify 和 EventLoop::runInLoopOOP執行緒AI
- 深入理解Javascript之Callstack&EventLoopJavaScriptOOP
- 瀏覽器/nodeJS中的EventLoop瀏覽器NodeJSOOP
- Eventloop不可怕,可怕的是遇上PromiseOOPPromise
- Netty 框架總結「ChannelHandler 及 EventLoop」Netty框架OOP
- 【Netty】EventLoop和執行緒模型NettyOOP執行緒模型
- 一道題引發的EventLoop思考OOP
- 前端中的事件迴圈eventloop機制前端事件OOP
- 瀏覽器EventLoop執行過程解析瀏覽器OOP
- 瀏覽器和node的eventLoop的區別瀏覽器OOP
- 瀏覽器 Javascript 的 EventLoop 動態圖析瀏覽器JavaScriptOOP
- Netty原始碼研究筆記(4)——EventLoop系列Netty原始碼筆記OOP
- Netty中的執行緒處理EventLoopNetty執行緒OOP
- Netty 基本元件小結–Channel、EventLoop、Bootstrap等Netty元件OOPboot
- Netty 框架學習 —— EventLoop 和執行緒模型Netty框架OOP執行緒模型
- Netty 基本元件小結--Channel、EventLoop、Bootstrap等Netty元件OOPboot
- 詳解高階前端面試常問的EventLoop前端面試OOP
- 又被node的eventloop坑了,這次是node的鍋OOP