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()),然后开始执行事件循环。
事件循环的执行循序:
每一个模块都是事件循环的一个阶段,每个阶段都有一个要执行的回调的FIFO队列。虽然每个阶段都不同,一般来说,当事件执行到一个阶段,先执行这个阶段特有的操作,然后操作这个阶段的队列,当队列执行完或者达到了回调上限,事件循环就会执行下一个阶段。
各个阶段介绍
timers:
执行 setTimeout() 和 setInterval().的回调
setImmediate() 的回调在这里执行 当程序执行之后,一般情况下,事件循环会在poll阶段等待连接请求,但是,如果代码中有setImmediate()的回调函数,并且poll阶段空闲,事件循环就会继续执行check阶段,而不会继续在poll阶段等在poll事件
close callbacks:
还是没有简明的讲清楚【笑抽】
最新文章
- JVM-Class文件
- 如何清除SQL Server Management Studio的最近服务器列表
- 01.Bootstrap入门
- delphi.指针.PChar
- 每天一个linux命令(44):top命令
- thread启动线程
- C#:如何解决WebBrowser.DocumentCompleted事件的多次调用
- shell中使用echo命令改变输出显示样式
- ActiveX控件的Events事件
- spring事务注解
- 【Moment.js】
- 为智能硬件提供一站式解决方案——机智云GoKit评测
- 线性判别分析算法(LDA)
- golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
- HAproxy指南之haproxy实现动静分离(案例篇)
- part4:素数判别
- 学习 rostopic
- [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
- python类内部调用自己的成员函数必须加self
- 解决升级Nodepad++都会让插件失效
热门文章
- vue 随笔 vue 的属性和方法
- python 面向对象六 动态添加方法 __slots__限制动态添加方法
- 【插件开发】—— 5 SWT控件以及布局使用
- 【API】反转输入字符(Java)
- 【洛谷3343_BZOJ3925】[ZJOI2015]地震后的幻想乡(状压 DP_期望)
- ZooKeeper通过ACL修复未授权访问漏洞
- Styles and Themens(3)android所有主题表
- C# 判断文件和文件夹是否存在并创建
- Java实现三角形计数
- Bmob使用心得