Node.js 的Event loop

本文介绍了Node.js的运行机制,包括V8引擎如何解析JavaScript脚本,并通过libuv库实现异步任务处理。同时对比了setTimeout、setImmediate及process.nextTick在事件循环中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指定的是在下次”事件循环”触发,所以很显然,前者总是比后者发生得早,而且执行效率也高(因为不用检查”任务队列”)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值