Node.js学习笔记(六) --- Nodejs 的非阻塞 I/O、 异步、 事件驱动

1Nodejs 的单线程 非阻塞 I/O 事件驱动
JavaPHP 或者.net 等服务器端语言中,会为每个客户端链接建立一个新的线程。
而每一个线程须要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器能够同时
链接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就须要增长服务器
的数量,而 Web 应用程序的硬件成本固然就上升了。
Node.js 不为每一个客户链接建立一个新的线程, 而仅仅使用一个线程。当有用户链接了,
就触发一个内部事件,经过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。
使用 Node.js一个 8GB 内存的服务器,能够同时处理超过 4 万用户的链接
2Nodejs 回调处理异步
javascript

/错误的写法:
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);
})

3Nodejs events 模块处理异步
Node.js 有多个内置的事件,咱们能够经过引入 events 模块,并经过实例化 EventEmitter类来绑定和监听事件。
 
java

// 引入 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的数据
相关文章
相关标签/搜索