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:

仍是没有简明的讲清楚【笑抽】
相关文章
相关标签/搜索