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

前言

Node.js使用 事件驱动机制、具有非阻塞的I/O模型这样的特点,Node.js中的大多数Api都用到了异步函数,那麽又该如何获取异步函数返回的数据呐!废话不多说,来看看本次分享 都有哪些亮点吧!

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

关键词:非阻塞I/O、事件驱动

1. 非阻塞I/O

  • 在 Java、 PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。 而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时 连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器 的数量,而 Web 应用程序的硬件成本当然就上升了。

  • Node.js 不为每个客户连接创建一个新的线程, 而仅仅使用一个线程。当有用户连接了, 就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。 使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户.

2. Nodejs 回调处理异步

错误的写法:

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、 Nodejs 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)

结语

OK,这次关于Node.js的分享 到这就结束了,希望能帮助刚入门的小白😜有深刻的理解。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值