V8引擎
V8是JavaScript引擎实现,被谷歌收购,V8使用C++开发,V8将其编译成原声机器码,使用内联缓存等方法提高性能
Node.js 的Event loop
Node.js的运行机制:
(1)V8引擎解析JavaScript脚本。
(2)解析后的代码调用 Node API
(3)libuv库负责Node API 的执行。它将不同的任务分配给不同的线程,形成一个事件循环,以异步的的方式将任务的执行结果返回给V8引擎。
(4)V8 引擎将结果返回给用户
除了setTimeout和setInterval这两个方法,Node.js还提供了process.nextTick和setImmediate。
process.nextTick()方法可以在执行栈尾部出发回调函数。即在下一次Event Loop(主线程读取“任务队列”)之前。即它指定的任务总是在所有异步任务执行之前。
setImmediate方法则是在当前“任务队列”尾部添加任务
Process.nextTick和seImmediate的区别:多个process.nextTick语句总是在当前执行栈一起执行完。多个setImmediate 可能需要多次loop 才能执行完。
如果递归调用process.nextTick()将会没完没了,主线进程根本不会读取“事件队列。”
由于process.nextTick指定的回调函数是在本次”事件循环”触发,而setImmediate指定的是在下次”事件循环”触发,所以很显然,前者总是比后者发生得早,而且执行效率也高(因为不用检查”任务队列”)。