nodejs運行機制


有一天老大忽然問起我這個問題,nodejs運行機制 是怎樣的?因自己對nodejs也不是很熟悉,就上網查了一下,得出結果如下;

1.簡介

Node.js是一個事件驅動I/O服務端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度非常快,性能非常好。將libuv作為跨平台抽象層,libuv是用c/c++寫成的高性能事件驅動的程序庫。nodejs的原理類似c/c++系統編程中的epoll

2.nodejs運行系統

(1)V8引擎解析JavaScript腳本。

(2)解析后的代碼,調用Node API。

(3)libuv庫負責Node API的執行。它將不同的任務分配給不同的線程,形成一個Event Loop(事件循環),以異步的方式將任務的執行結果返回給V8引擎。

(4)V8引擎再將結果返回給用戶。

3.事件循環(Event Loop)

nodejs 執行之后會初始化一個事件循環,執行代碼程序(這些程序可能會造成異步調用、定時器或者process.nextTick()),然后開始執行事件循環。

事件循環的執行循序:

loop

每一個模塊都是事件循環的一個階段,每個階段都有一個要執行的回調的FIFO隊列。雖然每個階段都不同,一般來說,當事件執行到一個階段,先執行這個階段特有的操作,然后操作這個階段的隊列,當隊列執行完或者達到了回調上限,事件循環就會執行下一個階段。

各個階段介紹

img

timers:

執行 setTimeout() 和 setInterval().的回調

setImmediate() 的回調在這里執行 當程序執行之后,一般情況下,事件循環會在poll階段等待連接請求,但是,如果代碼中有setImmediate()的回調函數,並且poll階段空閑,事件循環就會繼續執行check階段,而不會繼續在poll階段等在poll事件

close callbacks:

還是沒有簡明的講清楚【笑抽】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM