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)线程安全,没有加锁. ...
随机推荐
- Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码
说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...
- Python 100例(001)
#!/usr/bin/env python # coding:utf-8 '''有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少?''' n = 1 num = [4, ...
- Vue介绍
1.Vue的简介 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 AP ...
- ccflow表机构与运行机制(二次开发必看)
驰骋工作流引擎,工作流程管理系统,表结构与运行机制. ------------------------------------------------------- 前言: 1, ccflow 有自动 ...
- How to Apply Patches to a WLS 8.1 Environment
APPLIES TO: Oracle Weblogic Server - Version 8.1 to 8.1Information in this document applies to any p ...
- 彻底关闭Excle进程的几个方法
之前研究过的问题,最近有朋友问,这里再总结下做一个笔记. 我们在应用程序里面通过创建Excle应用对象打开Excle的情况下,如果不注意几个问题,可能无法彻底关闭Excle进程,来考察下面的几种情况: ...
- SQL Server GUID 数据迁移至MongoDB后怎样查看?
关键字:SQL Server NEWID():BSON:MongoDB UUID 1.遇到的问题和困惑 SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此 ...
- Python+ITchart实现微信机器人对指定的朋友和群自动回复
这里我主要用了3个机器人,可以切换. 1.图灵机器人 (傻的不行,一直在问别人问题,没有限制) http://www.tuling123.com 2.showApi上的图灵机器人 (感觉最聪明,可以 ...
- Netty初体验
package netty_starter; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFut ...
- Linux中Tomcat设置开机启动
设置方法 1.修改/etc/rc.d/rc.local,使用vi /etc/rc.d/rc.local 命令 2.在/etc/rc.d/rc.local文件最后添加下面两行脚本 export JAVA ...