nodejs事件循环

Posted we are young

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs事件循环相关的知识,希望对你有一定的参考价值。

1. 只有一个主线程,node开始执行脚本时,会先进事件循环初始化(同步任务,发出异步请求,规划定时器生效时间,执行promise.nextTick等),这是事件循环还未开始。

2. nodejs每一轮事件循环的六个阶段(事件循环会无限次执行,直到异步任务的回调函数队列清空才会停止执行):

  1. timers(处理setTimeout和setInterval的回调函数)
  2. I/O callbacks(除了setTimeout、setInterval、setImmediate、用于关闭请求的回调函数)
  3. idle,prepare(libuv内部使用)
  4. poll(等待还未返回的I/O事件)
  5. check(setImmediate)
  6. close callbacks(执行关闭请求的回调,如socket.on(‘close‘, ...))

3. setTimeout和setImmediate:

    由于setTimeout第二个参数默认为0,但是加上node做不到真正的0ms,最少也需要1s;所以实际执行进入事件循环后,如果没到1ms,那么timers阶段就会跳过进入check阶段,所以执行顺序不确定。

4. 异步任务分两种:

    本轮循环:promise.nextTick、promise的回调函数

    次轮循环:setTimeout、setInteval、setImmediate的回调函数

以上是关于nodejs事件循环的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 事件循环

浏览器事件循环与node事件循环

js循环点击div事件

小痴Nodejs升级路---事件循环eventloop

在nodejs中事件循环分析

js如何循环添加点击事件