返回介绍

七、Nodejs 的非阻塞 I/O、异步、事件驱动

发布于 2024-06-12 23:28:34 字数 1264 浏览 0 评论 0 收藏 0

7.1 Nodejs 的单线程 非阻塞 I/O 事件驱动

  • 在 Java、PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。 而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时 连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器 的数量,而 Web 应用程序的硬件成本当然就上升了
  • Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了, 就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。 使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户的连接。

7.2 Nodejs 回调处理异步

//错误的写法:
function getData(){ 
  //模拟请求数据 
  var result='';
  setTimeout(functio n (){ 
    result='这是请求到的 数据'
  },200);
  
  return result; 
}
console .log(getData());/*异步导致请求不到数据*/
//正确的处理异步:
function getData(callback) { //模拟请求数据
  var result = '';
  setTimeout(function() {
    result = '这是请求到的 数据';
    callback(result);
  },
  200);
}
getData(function(data) {
  console.log(data);
})

7.3 Nodejs events 模块处理异步

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件。

// 引入 events 模块
var events = require('events');
var Even tEmitter =new event s .EventEmitter() ; /*实例化事件对象*/
EventEmitter.on('toparent',function(){ console.log('接收到了广播事件');
})
setTimeout(function (){
  console.log('广播');
  EventEmitter.emit('toparent' ); /*发送广播*/ 
},1000)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文