• 技术文章 >web前端 >js教程

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

    青灯夜游青灯夜游2021-07-07 19:34:18转载194
    本篇文章带大家了解一下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

    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中的事件循环的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:Node.js 事件循环
    上一篇:聊聊TypeScript中Enum(枚举)的用法 下一篇:浅谈Angular中组件样式的工作原理
    线上培训班

    相关文章推荐

    • 浅谈Nodejs中的可写流write与实现方法• 浅谈Nodejs文件模块中的fs.mkdir和fs.rmdir• 深入了解Node.js的中Worker Threads(工作线程)• Node版本管理工具--nvm-windows的使用方法(windows环境)• 深入了解Node.js中的非阻塞 I/O

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网