Node.js最大的特性就是异步式I/O与事件紧密结合的编程模式。这种模式与传统的同步式IO线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元格。
内容:阻塞和线程
1.同步式I/O或阻塞式I/O
线程在执行中如果遇到磁盘读写或网络通信,通常要耗费较长时间。这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式成为阻塞,当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权、令其继续执行。
2.异步式I/O或非阻塞式I/O
针对所有I/O操作不采用阻塞策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是讲IO请求发送给操作系统,继续执行下一条语句,当操作系统完成IO操作时,以事件的形式通知执行IO操作的线程,线程会在特定时候处理这个事件,为了 处理异步IO,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
3.非阻塞与阻塞模式区别
非阻塞模式下,一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%,IO以事件的方式通知。
阻塞模式下,多线程往往能提高系统吞吐量,因为一个线程阻塞还有其他线程在工作,多线程可以让CPU资源不被阻塞中的线程浪费。
调度:当前一个工作,在5分钟之后执行
4.同步式IO与异步式IO区别
同步式IO(阻塞式)                                                          异步式IO(非阻塞)
利用多线程提供吞吐量                                          单线程即可实现高吞吐量
通过事件片分割和线程调度利用多核CPU            通过功能划分利用多核
需要由操作系统调度多线程使用多核CPU            可以将单线程绑定到单核CPU
难以充分利用CPU资源                                            可以充分利用CPU资源
内存轨迹大,数据局部性弱                                    内存轨迹小,数据局部性强    
 符合线性的编程思维                                                不符合传统编程思维

node.js异步式IO与事件式编程相关推荐

  1. 五种网络IO模型:阻塞式IO 非阻塞式IO IO复用(IO multiplexing) 信号驱动式IO 异步IO

    文章目录 五种网络IO模型 举例说明 阻塞式I/O模型 非阻塞式I/O I/O多路复用 信号驱动式I/O 异步I/O 比较结果 总结 同步 异步 阻塞 非阻塞 阻塞/非阻塞: 同步/异步: 举例子:小 ...

  2. 57 Node.js异步编程

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...

  3. Node.js: 如何继承 events 自定义事件及触发函数

    events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 ...

  4. Node.js异步编程~超级详细哦

    下面是对Node.js异步编程的整理,希望可以帮助到有需要的小伙伴~ 文章目录 同步API,异步API 同步API,异步API的区别 获取返回值的方式不同 代码执行顺序不同 Node.js中的异步AP ...

  5. node.js 异步_Node.js v14中的异步本地存储是什么?

    node.js 异步 Node.js 14 is out now, and with that release, it brings in Async Local Storage support. N ...

  6. Node.js 和Socket.IO 实现chat

    使用 Node.js 和 Socket.IO 构建简单的聊天程序 在node.js根目录下创建文件夹chat,里面添加两个文件:app.js和index.html app.js var fs = re ...

  7. TWaver HTML5 + Node.js + express + socket.io + redis(六)

    接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...

  8. Node.js 异步编程之 Callback介绍

    原文:http://www.jb51.net/article/63070.htm ------------------------------------- Node.js 基于 JavaScript ...

  9. TWaver HTML5 + Node.js + express + socket.io + redis(五)

    接上一回TWaver HTML5 + Node.js + express + socket.io + redis(四), 这一篇您将了解到 1. 如何保存更改后的拓扑数据 (包括新增的, 修改的, 删 ...

最新文章

  1. Oracle归档已满的处理办法
  2. javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)
  3. 算术编码(Arithmetic Coding)源代码
  4. SpringMVC(六) RequestMapping 路径中ant风格的通配符
  5. aws s3 连接建立
  6. 智能优化算法:头脑风暴优化算法-附代码
  7. mac简体拼音打出来是英文_为什么word打不出拼音 mac的word打字出拼音
  8. 92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了
  9. FMAN(Fully Motion-Aware Network for Video Object Detection)论文详读
  10. 在淘宝做前端的这三年 — 第二年
  11. 微信公众号用什么软件编辑?
  12. 群晖php安装目录,如何在群晖上搭建网盘目录?(无Docker) 来自 世界三傻
  13. 最新!Xmind2020安装教程
  14. 【Java学习笔记】接收命令行参数输出指定个数的斐波那契数列
  15. 配置vscode C语言运行环境(保姆级教程)
  16. ICLR 2022杰出论文奖出炉!清华、人大获奖!浙大提名
  17. 狡猾的老鼠-循环C语言,狡猾的老鼠
  18. Sting str = aaaa 的形式定义一个字符串最大长度只能有 65534 个。
  19. Apache Phoenix
  20. NC17889 新建 Microsoft Office Word 文档

热门文章

  1. iOS中NSLog的优化使用
  2. 现代软件工程讲义 5 项目经理 Program Manager
  3. java 参数代替所有类_Java中的常用类
  4. python实现关联算法_python使用Apriori算法进行关联性解析
  5. linux nginx 安装stream,Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载
  6. oracle 作业已存在,ORA-31634: 作业已存在
  7. vim显示python嵌套级_在Vim中为Python突出显示语法
  8. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件
  9. 安装oracle配置监听出错,安装失败,无法建立监听?
  10. 人工智能python小程序_Python:一个可以套路别人的python小程序