Node的事件循环

作者: 前端精髓 | 来源:发表于2019-06-04 16:41 被阅读1次

Node的自身执行模型是事件循环,理解了事件循环可以清楚的知道代码的执行顺序。事件循环就像一个这样的循环体,不断的轮询。当然,如果没有观察者,进程就会退出,不会死循环的。哈哈。

while (true) {
    // 执行异步操作
}

事件循环里面都有对应的观察者,然后事件循环从观察者中取出事件并执行。观察者可以理解为一个数据存在一对多的关系,所以使用了观察者。观察者是有先后时序的。

image
  1. timers 观察者中存放了定时器(setTimeout,setInterval)回调队列
  2. idle 观察者中存放 process.nextTick() 回调队列
  3. poll 观察者中存放了读取文件的回调队列
  4. check 观察者中存放 setImmediate 回调队列

现在已经知道了观察者执行的先后顺序,下面看看代码演示

// 加入两个nextTick()的回调函数
process.nextTick(function () {
  console.log('nextTick延迟执行1');
});
process.nextTick(function () {
  console.log('nextTick延迟执行2');
});
// 加入两个setImmediate()的回调函数
setImmediate(function () {
  console.log('setImmediate延迟执行1');
  // 进入下次循环
  process.nextTick(function () {
    console.log('最后执行');
  });
});
setImmediate(function () {
  console.log('setImmediate延迟执行2');
});
console.log('正常执行');

输出结果

正常执行
nextTick延迟执行1
nextTick延迟执行2
setImmediate延迟执行1
setImmediate延迟执行2
最后执行

提示:观察者的回调队列是一个队列执行完毕再执行下一个回调队列。代码中idle观察者中有两个process.nextTick的回调,check观察者中有两个setImmediate的回调。如果在一个方法中有回调加入其他队列,但是当前队列有方法没有执行完毕,需要先把当前的执行完毕后再执行其他队列的方法。

总结:Node中包含一些异步的API,而处理异步是通过事件循环的方式,异步API中的回调会存放在对应的观察者队列中,观察者有先后顺序,然后事件循环从观察者中取出事件并执行。

相关文章

  • node 事件

    1、事件 1.1普通事件的使用 1.2、Node.js 的事件循环机制解析 1)Node 由事件循环开始,到事件循...

  • node 事件循环

    概念 -单线程、单进程,结合V8的异步回调接口,处理大量并发-API支持回调函数-事件机制采用设计模式中观察者模式...

  • Node事件循环

    Node.js 事件循环机制 Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程、高并发的 Ja...

  • node事件循环

    事件循环 事件循环是一个典型的生产者/消费者模式,网络请求,异步IO源源不断的产生提供不同类型的事件到观察者哪里,...

  • node事件循环

    浏览器事件循环见:https://www.jianshu.com/p/64bbefbe5ae5[https://w...

  • Node事件循环

    Node架构图 事件循环核心 核心模块就是LIBUV 在linux上,libuv是对epoll的封装; 在wind...

  • Node事件循环

    官网事件循环:https://nodejs.org/zh-cn/docs/guides/event-loop-ti...

  • 学习 nodejs I /O 交互

    1 事件循环 Node的执行模型实际上是事件循环。在进程启动时,Node会创建一个无限循环,每一次执行循环体的过程...

  • node.js的事件循环

    在node中,事件循环表现出的状态与浏览器中大致相同。不同的是node中有一套自己的模型。node中事件循环的实现...

  • Node的事件循环

    1.同步任务与异步任务(1)同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行下一个任务;(2)...

网友评论

    本文标题:Node的事件循环

    本文链接:https://www.haomeiwen.com/subject/mllrxctx.html