Node.js - 事件循环

作者: 廖马儿 | 来源:发表于2018-02-24 18:08 被阅读20次

Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

官网:http://www.runoob.com/nodejs/nodejs-event-loop.html

图片.png

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件。

事件 events

event:事件。
eventEmitter: 事件触发器。
emit():触发事件的方法。

实例:

var events = require('events');

var eventEmitter = new events.EventEmitter();

// 创建事件处理程序
var connectHandler = function connected() {
  console.log("连接成功");
  
  // 触发 data_received 事件
  eventEmitter.emit('data_received');
}

// 绑定connection 事件处理程序
eventEmitter.on('connection', connectHandler)

// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function () {
  console.log('数据接收成功。')
});

// 触发connection事件
eventEmitter.emit('connection');

console.log("程序执行完毕");

执行上面的代码:

$ node main.js
连接成功。
数据接收成功。
程序执行完毕。

Node 应用程序是如何工作的?

在Node应用程序中,执行异步操作的函数将回调函数作为最后一个参数:
eg:
上面的例子。

eventEmitter.on('data_received', function () {
  console.log('数据接收成功。')
});

回调函数接收错误对象作为第一个参数。

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("程序执行完毕");

以上程序中 fs.readFile() 是异步函数用于读取文件。 如果在读取文件过程中发生错误,错误 err 对象就会输出错误信息。
如果没发生错误,readFile 跳过 err 对象的输出,文件内容就通过回调函数输出。

执行以上代码,执行结果如下:

程序执行完毕
菜鸟教程官网地址:www.runoob.com

接下来我们删除 input.txt 文件,执行结果如下所示:

程序执行完毕
Error: ENOENT, open 'input.txt'

因为文件 input.txt 不存在,所以输出了错误信息。

相关文章

  • node 事件

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

  • 浅析Nodejs Event Loop

    什么是事件循环(Event Loop) 事件循环能让 Node.js 执行非阻塞 I/O 操作,尽管JavaScr...

  • 「翻译」Node.js 事件循环、计时器和process.nex

    什么是事件循环? 事件循环允许Node.js执行非阻塞I/O操作 - 尽管JavaScript是单线程的 - 只要...

  • 关于 JavaScript 事件循环 Event Loop 的一

    浏览器 JavaScript 执行流程以及在 Node.js 中都是基于事件循环的。 了解事件循环的工作原理对于正...

  • node.js(七)

    Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。No...

  • 程序员的日常记录

    ?事件循环Node.js Event Loop 的理解 Timers,process.nextTick()Node...

  • js事件循环:微任务和宏任务

    浏览器JavaScript执行流程以及Node.js中的流程均基于事件循环。 了解事件循环的工作方式对于优化(有时...

  • Node事件循环

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

  • Node.js - 事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js 的每一个 AP...

  • Node.js事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 A...

网友评论

    本文标题:Node.js - 事件循环

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