NodeJS 事件循环

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

Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式(发布-订阅)实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

 

 

var events = require('events');
var eventEmitter = new events.EventEmitter();


//创建处理程序
var onFire = function() {
    console.log('点火');

    //触发放油
    eventEmitter.emit('pour_oil');
};
eventEmitter.on('fire', onFire);

var oil = function() {
    console.log('往锅里倒油');
}

eventEmitter.on('pour_oil', oil);

eventEmitter.emit('fire');

console.log('程序结束');

EventEmitter 提供了多个属性,如 on 和 emiton 函数用于绑定事件函数,emit 属性用于触发一个事件。接下来我们来具体看下 EventEmitter 的属性介绍。

var events = require('events');
var eventEmitter = new events.EventEmitter();


//创建处理程序
var onFire = function() {
    console.log('点火');

    //触发放油
    eventEmitter.emit('pour_oil');
};
eventEmitter.on('fire', onFire);

var oil = function() {
    console.log('往锅里倒油');
}

eventEmitter.on('pour_oil', oil);

var listen1;
//添加监听器
eventEmitter.addListener('fire', listen1 = function() {

    console.log('fire1');
});
eventEmitter.addListener('fire', function() {

    console.log('fire2');
});
//统计fire事件上有多少个监听器
var count = require('events').EventEmitter.listenerCount(eventEmitter, 'fire');
console.log("fire上有 " + count + " 个事件监听器。");

//移除监听器
eventEmitter.removeListener('fire', listen1);
console.log('listen1 已经被移除');


//统计fire事件上有多少个监听器
var count = require('events').EventEmitter.listenerCount(eventEmitter, 'fire');
console.log("fire上有 " + count + " 个事件监听器。");

console.log('程序结束');

posted @ 2017-03-13 14:40  乌梅  阅读(351)  评论(0编辑  收藏  举报