node与浏览器 event loop的区别
2019-10-14 本文已影响0人
皮神雷卡丘
浏览器环境下,microtask的任务队列是每个macrotask执行完之后执行。而在Node.js中,microtask会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行microtask队列的任务。
event loop
掘金原文链接
Node 的 Event Loop 分为 6 个阶段:
timers:执行setTimeout() 和 setInterval()中到期的callback。
pending callback: 上一轮循环中有少数的I/O callback会被延迟到这一轮的这一阶段执行
idle, prepare:仅内部使用
poll: 最为重要的阶段,执行I/O callback,在适当的条件下会阻塞在这个阶段
check: 执行setImmediate的callback
close callbacks: 执行close事件的callback,例如socket.on('close'[,fn])、http.server.on('close, fn)
node是事件驱动模型
事件驱动的程序,就是一个死循环,并以一个线程的形式存在,这个死循环包括两个部分,第一个部分是按照一定的条件接收并选择一个要处理的事件,第二个部分就是事件的处理过程。程序的执行过程就是选择事件和处理事件,而当没有任何事件触发时,程序会因查询事件队列失败而进入睡眠状态,从而释放cpu。