在Node官网的首页中,是这么介绍:
Node.js®是一个基于Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。Node.js 之生态系统是目前最大的开源包管理系统。
森么是运行时,什么是事件驱动,什么是非阻塞I/O?
运行时
“运行时”表示完整的 JavaScript 执行环境。 所创建的每个运行时都有自己的独立垃圾回收堆,默认情况下,还拥有自己的实时 (JIT) 编译器线程和垃圾回收器 (GC) 线程。
事件驱动和非阻塞I/O模型
简单的说,首先JavaScript是单线程的,也就是说工作只能一件一件的来.JavaScript有一个主线程,同步执行的任务都是在主线程上一次执行,而异步任务会在主线程挂起,所谓挂起,就是指异步任务所对应的<b>回调函数</b>,把需要I/O设备处理的任务交由I/O设备处理,主线程会继续往下执行,并不会等待I/O设备的结果.当I/O设备处理完成以后,会在任务队列(也可以叫做消息队列)中添加一个事件,当主线程上的同步任务<b>全部执行完成</b>以后,主线程才会去任务队列中取出事件,并执行此事件,也就是执行此异步任务对应的回调函数.
值得注意的事情是,而消息队列的数据结构是队列,也就是说,主线程去消息队列中取出事件的顺序是先进先出的.
node.js运行流程
如图所示:
由chrome的V8引擎来解析js的代码,V8引擎会调用node.js的I/O接口,通过Libuv来实现事件循环.将结果返回给V8引擎,最后显示出结果.