Node.js的非阻塞I/O、异步与事件驱动介绍
1、Node.js的单线程 非阻塞 I/O 事件驱动
在 Java、PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。
而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器的数量,而 Web 应用程序的硬件成本当然就上升了。
Node.js 不为每个客户连接创建一个新的线程, 而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。
使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户的连接。
2、Node.js回调处理异步
//错误的写法: function getData(){ //模拟请求数据 var result=''; setTimeout (function(){ result='这是请求到的数据' },200); return result; } console.log(getData());/*异步导致请求不到数据*/ //正确的处理异步: function getData(callback){ //模拟请求数据 var result=''; setTimeout (function(){ result='这是请求到的数据'; callback(result); },200); } getData(function(data){ console.log(data); })
3、Node.js events模块处理异步
Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter类来绑定和监听事件。
// 引入 events 模块 var events = require('events'); var EventEmitter=new events.EventEmitter(); /*实例化事件对象*/ EventEmitter.on ('toparent',function(){ console.log('接收到了广播事件'); }) setTimeout (function(){ console.log('广播'); EventEmitter.emit ('toparent'); /*发送广播*/ },1000)
Node.js 事件循环
/* Node.js 事件循环: Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件, */ // 引入 events 模块 var events = require('events'); var EventEmitter = new events.EventEmitter(); //监听to_mime的广播 EventEmitter.on('to_mime', function (data) { console.log(data, '接收to_mime的数据'); }) //监听to_parent的广播 EventEmitter.on('to_parent', function (data) { console.log(data, '接收to_parent的数据'); //广播to_mime事件 EventEmitter.emit('to_mime', '发送to_mime的数据') }) setTimeout(function () { console.log('开始广播...'); //广播to_parent事件 EventEmitter.emit('to_parent', '发送to_parent的数据') }, 1000);
执行结果
开始广播...
发送to_parent的数据 接收to_parent的数据
发送to_mime的数据 接收to_mime的数据
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
使用NodeJS 5分钟 连接 Redis 读写操作的详细过程
这篇文章主要介绍了NodeJS 5分钟 连接 Redis 读写操作,本文给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-07-07使用Express+Node.js对mysql进行增改查操作
这篇文章主要介绍了使用Express+Node.js对mysql进行增改查操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-08-08Nodejs 和 Electron ubuntu下快速安装过程
本文较为详细的给大家介绍了Nodejs 和 Electron ubuntu下快速安装过程,非常不错,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧2018-05-05
最新评论