前言

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的分享 到这就结束了,希望能帮助刚入门的小白

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

  1. linux 中阻塞与非阻塞 同步与异步

    简单点说: 阻塞就是干不完不准回来, 非阻塞就是你先干,我先看看有其他事没有,完了告诉我一声. 我们拿最常用的send和recv两个函数来说吧.比如你调用send函数发送一定的Byte,在系统内部se ...

  2. 异步通知是什么意思_一次相亲经历,我彻底搞懂了阻塞非阻塞、同步异步

    看到标题,可能你会想,相亲跟阻塞/非阻塞,同步/异步有啥关系,这个逗b不知道在想什么东西.不要急,且听我慢慢道来 年纪大了,一回家七大姑八大姨就各种催婚,都说要给我介绍女朋友.这不,刚刚门口,我的大姨 ...

  3. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  4. 异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...

    "看到标题,可能你会想,相亲跟阻塞/非阻塞,同步/异步有啥关系,这个逗b不知道在想什么东西.不要急,且听我慢慢道来 年纪大了,一回家七大姑八大姨就各种催婚,都说要给我介绍女朋友.这不,刚刚门 ...

  5. Java 非阻塞 IO 和异步 IO

    转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...

  6. 浅谈阻塞/非阻塞、同步/异步——从linux read()系统调用出发

    浅谈阻塞/非阻塞.同步/异步 –从linux IO系统调用出发 阻塞与非阻塞主要从进程/线程的角度出发: 阻塞(blocking):教科书年年考的概念--调用方(主线程)发起调用之后挂起直到被调用方法 ...

  7. 阻塞和非阻塞IO,异步和同步IO

    从网上看到一遍比较好的博客介绍阻塞和非阻塞IO,异步和同步IO的区别和各自的使用场景,虽然是从网络套接字方面解析的,不过也是适合于对驱动文件的操作,毕竟套接字的本质也是一个文件描述符. 转载内容 本文 ...

  8. 非阻塞IO与异步IO

    一.非阻塞IO的轮询读写 ---如果当前进程有多个输入终端和多个输出终端呢?while((n=read(STDIN_FILENO,buf,buf_size))>0){ if(write(STDO ...

  9. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

    目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...

最新文章

  1. Linux7-常用文件管理命令及系统变量基础
  2. 读不完的顶会Paper,我该如何读论文?
  3. 10岁高分考上大学,16岁读博的95后神童张炘炀,活成了他想要的样子吗?
  4. 论文浅尝 | 提取计数量词丰富知识库
  5. exls导入数据库 php_PHP读取excel文件并导入数据库
  6. matlab 扫雷命令,Matlab版扫雷
  7. 抽象类继承多个抽象类_多重继承?抽象类?C++的内存布局并不复杂
  8. python语言属于什么_最近很火的Python是什么?属于什么语言?
  9. spark学习-40-Spark的UnifiedMemoryManager
  10. http head详解
  11. Python While 循环语句
  12. Java的下载与安装简易教程
  13. 第29期:蓝桥杯练习-2022/2/12
  14. 牛客 赛码网 编程题JavaScript的输入输出
  15. KindEditor的简单应用
  16. Python自动登录QQ空间
  17. SylixOS -- 双网卡冗余备份使用说明
  18. 马虎词汇教程1-5(转载)
  19. BERT模型—1.BERT模型架构
  20. 【凸优化】关于 KKT 条件 及其最优性

热门文章

  1. python调用bitly api出错
  2. 如何写出更优雅的代码——编程范式简述
  3. JavaScript实现爆炸碎片的 图片切换 效果
  4. php公众号菜单链接,微信公众号菜单栏添加外部链接
  5. vue项目将px转为rem实践
  6. 面试公司Offer——我的Python求职之路
  7. 2015-10-17
  8. 达科为在创业板递交注册申请:拟募资8亿元,吴庆军父女为实控人
  9. 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库
  10. JavaScript 中的事件类型3(读书笔记思维导图)