zoukankan      html  css  js  c++  java
  • 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('程序结束');

  • 相关阅读:
    js 改变颜色值
    React之使用Context跨组件树传递数据
    App.js实现使用js开发app的应用,此文是中文文档
    转: CSS3 @media 用法总结
    转: 如何用手机访问电脑本地 localhost 网页或者服务器, 以调试web项目
    js 替换字符串中所有匹配的字符
    转:display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
    转:HTML5页面如何在手机端浏览器调用相机、相册功能
    文本相似度度量
    idea中maven中jdk版本的选择(转)
  • 原文地址:https://www.cnblogs.com/meiyh/p/6542745.html
Copyright © 2011-2022 走看看