nodejs運行機制

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

1.簡介c++

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引擎。oop

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

3.事件循環(Event Loop)線程

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

事件循環的執行循序:隊列

loop

每個模塊都是事件循環的一個階段,每一個階段都有一個要執行的回調的FIFO隊列。雖然每一個階段都不一樣,通常來講,當事件執行到一個階段,先執行這個階段特有的操做,而後操做這個階段的隊列,當隊列執行完或者達到了回調上限,事件循環就會執行下一個階段。

各個階段介紹

img

timers:

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

setImmediate() 的回調在這裏執行 當程序執行以後,通常狀況下,事件循環會在poll階段等待鏈接請求,可是,若是代碼中有setImmediate()的回調函數,而且poll階段空閒,事件循環就會繼續執行check階段,而不會繼續在poll階段等在poll事件

close callbacks:

仍是沒有簡明的講清楚【笑抽】
相關文章
相關標籤/搜索