一文快速了解Node.js中的事件循环


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章带大家了解一下Node.js异步编程中的事件循环。事件循环是实现Node非阻塞I/O非常重要的一部分!事件循环,非阻塞I/O都是属于LIBUV这个C++库的底层能力。理解了事件循环,非阻塞I/O就理解了Node的异步是怎样运行的!

Node 自身的执行模型――事件循环,正是它使得回调函数十分普遍。【推荐学习:《nodejs 教程》】

在进程启动时,Node 便会创建一个类似于 while(true)的循环,每执行一次循环体的过程我 们称为 Tick。每个 Tick 的过程就是查看是否有事件待处理,如果有,就取出事件及其相关的回调 函数。如果存在关联的回调函数,就执行它们。然后进入下个循环,如果不再有事件处理,就退 出进程

1.png
Tick 流程图

事件循环是实现 Node.js 非阻塞 I/O 非常重要的一部分! 事件循环,非阻塞 I/O 都是属于 LIBUV 这个 C++ 库的底层能力。 理解了 事件循环,非阻塞 I/O 就理解了 Node.js 的异步是怎样运行的!

通过代码模拟 eventloop

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

const eventloop = {

  queue: [],

  // 循环方法

  loop() {

    // 不停的检测队列是否还有未循环的消息

    while (this.queue.length) {

      const callback = this.queue.shift();

      callback();

    }

 

    // 执行下一次循环

    // 小知识点 JS的 this绑定

    setTimeout(this.loop.bind(this), 50);

  },

  // 添加消息到队列

  add(callback) {

    this.queue.push(callback);

  },

};

 

eventloop.loop();

 

setTimeout(() => {

  eventloop.add(() => {

    console.log("第一个");

  });

}, 500);

 

setTimeout(() => {

  eventloop.add(() => {

    console.log("第二个");

  });

}, 800);

以上就是事件循环的一个最基本的例子, 我们可以往里面添加消息,然后它隔一段时间就检测一下是否有事件没有处理完,如果有则执行事件处理

每一个事件循环都是全新的调用栈

更多编程相关知识,请访问:编程视频!!

以上就是一文快速了解Node.js中的事件循环的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

深入了解node.js中的koa框架

node.js fs是什么

node.js和javascript区别是什么

为什么要用node.js?哪些场合可以使用 node.js

node.js真的单线程吗?进程间如何通信?

linux服务器搭建node.js环境的步骤介绍

如何从javascript到typescript?

node.js是什么?有什么优势?有什么用途?

浅谈使用node.js搭建一个简单的 http 服务器

深入了解node.js中的非阻塞 i/o

更多相关阅读请进入《node.js》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...