Node.js的事件处理机制
1. 为什么Node.js是单线程执行的
因为从JavaScript设计之初,JavaScript是用户与浏览器交互的,主要处理DOM; 这样决定了JavaScript是单线程执行,否则会出现问题;例如:JavaScript的两个线程同时处理同一个DOM元素,则会出现意想不到的错误;
所以Node.js依然是单线程执行;但是不代表Node.js是单线程的,实际上Node.js是多线程的,只是单线程执行而已
2. 非阻塞与任务队列机制
在实际情况下,用户的输入输出是很快速的,但是IO操作确很慢,不能让用户等待IO操作完了,用户才能再次输入输出,这样会导致用户的体验很不;
所以,Node.js的解决方案是用户的操作是非阻塞的,但是其他IO这些费时的操作先放入任务队列中;等用户的输入输出操作完了,再从任务队列中依照顺序执行返回结果
执行流程:
(1)Node.js单线程执行,所有同步任务在执行栈中执行
(2)所有异步任务返回了结果,就在任务队列中加入一个事件,以后进行异步回调
(3)所有的同步任务执行完,读取任务队列,开启执行异步回调
3. 事件监听:
实例代码:
index.js
//导包const EventEmitter = require("events")
//继承事件类,定义自己的事件类
class MyEventEmitter extends EventEmitter{
}
//创建事件对象
const myEventEmitter = new MyEventEmitter()
//绑定监听
myEventEmitter.on("event_name", (param1, param2) => {
console.log(param1 + param2)
});
//触发事件
myEventEmitter.emit("event_name", "aaaa", "bbbbb");
Node.js的事件处理机制的更多相关文章
- Node.js 事件循环机制
Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程.高并发的 JavaScript 运行时环境,而单线程就意味着同一时间只能做一件事,那么 Node.js 如何通过单线程来实现高并发 ...
- node.js之内存机制特性
Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一 ...
- Node.js之模块机制
> 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号.  - 模块机制
2.1 CommonJS规范 2.1.1 CommonJS的出发点 2.1.2 CommonJS的模块规范 2.2 Node的模块实现 2.2.1 优先从缓存加载 2.2.2 路径分析和文件定位 2. ...
- node.js之事件机制
EventEmitter类 方法名与参数 描述 参数说明 addListener(event,listener) 对指定的事件绑定事件处理函数 参数一是事件名称,参数二是事件处理函数 on(event ...
- Node.js 的异步机制由事件和回调函数——循环中的回调函数
var fs=require('fs'); var files =['a.txt','b.txt','c.txt']; // for (var i = 0; i < files.length; ...
- Node.js机制及原理理解初步【转】
一.node.js优缺点 node.js是单线程. 好处就是 1)简单 2)高性能,避免了频繁的线程切换开销 3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低 3)线程安全,没有加锁. ...
随机推荐
- year 和 weak year 的区别
java 中使用 SimpleDateFormat 时,会遇到 year 和 week year 这两个概念,特此记录. google 答案: A week year is in sync with ...
- Android项目刮刮奖详解(一)
前言 最近正在学鸿洋大大的刮刮奖,感觉学有所得,便是来写篇详解(尽管网上有很多了,不过毕竟是自己写的,自己以后方便复习),正文开始 目标 实现画板功能 思路 我们需要自定义View来实现画板功能,之后 ...
- Vue.js如何在一个页面调用另一个同级页面的方法
使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: 需要在展示页里调用顶部导航栏页里的方法,两者之间没有引用关 ...
- Python进阶之函数式编程
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- C++ 死循环在语言层面的检测
英文概念 Infinite loop without side-effects 这个目前只有CLang实现了这个C++特色 #include <iostream> int 费马定理() { ...
- Lua在Redis中的应用
转载至笑松小站http://blog.seoui.com/2018/01/27/redis-lua/ redis从2.6版本开始内置支持Lua解释器,解释器提供了3个函数来处理redis的命令redi ...
- JavaScript中闭包的写法和作用详解
1.什么是闭包 闭包是有权访问另一个函数作用域的变量的函数. 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内.而且,这些内部函数可以访问它们所在的外 ...
- C#生成JOSN字符串
C#如何生成JSON字符串?(序列化对象) 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象 ...
- C#与SQL Server数据库连接
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- django 创建admin用户名跟密码
一.django中创建用户名和密码 (venv) D:\project\py37project\Djangopro\Procrm>Python37 manage.py createsuperus ...