有一天老大忽然问起我这个问题,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()),然后开始执行事件循环。

事件循环的执行循序:

每一个模块都是事件循环的一个阶段,每个阶段都有一个要执行的回调的FIFO队列。虽然每个阶段都不同,一般来说,当事件执行到一个阶段,先执行这个阶段特有的操作,然后操作这个阶段的队列,当队列执行完或者达到了回调上限,事件循环就会执行下一个阶段。

各个阶段介绍

timers:

执行 setTimeout() 和 setInterval().的回调

setImmediate() 的回调在这里执行 当程序执行之后,一般情况下,事件循环会在poll阶段等待连接请求,但是,如果代码中有setImmediate()的回调函数,并且poll阶段空闲,事件循环就会继续执行check阶段,而不会继续在poll阶段等在poll事件

close callbacks:

还是没有简明的讲清楚【笑抽】

最新文章

  1. JVM-Class文件
  2. 如何清除SQL Server Management Studio的最近服务器列表
  3. 01.Bootstrap入门
  4. delphi.指针.PChar
  5. 每天一个linux命令(44):top命令
  6. thread启动线程
  7. C#:如何解决WebBrowser.DocumentCompleted事件的多次调用
  8. shell中使用echo命令改变输出显示样式
  9. ActiveX控件的Events事件
  10. spring事务注解
  11. 【Moment.js】
  12. 为智能硬件提供一站式解决方案——机智云GoKit评测
  13. 线性判别分析算法(LDA)
  14. golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
  15. HAproxy指南之haproxy实现动静分离(案例篇)
  16. part4:素数判别
  17. 学习 rostopic
  18. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
  19. python类内部调用自己的成员函数必须加self
  20. 解决升级Nodepad++都会让插件失效

热门文章

  1. vue 随笔 vue 的属性和方法
  2. python 面向对象六 动态添加方法 __slots__限制动态添加方法
  3. 【插件开发】—— 5 SWT控件以及布局使用
  4. 【API】反转输入字符(Java)
  5. 【洛谷3343_BZOJ3925】[ZJOI2015]地震后的幻想乡(状压 DP_期望)
  6. ZooKeeper通过ACL修复未授权访问漏洞
  7. Styles and Themens(3)android所有主题表
  8. C# 判断文件和文件夹是否存在并创建
  9. Java实现三角形计数
  10. Bmob使用心得