概览

第三章 - 异步I/O - 图1

整个异步IO流程

:::info Node异步IO模型四个基本要素: 事件循环、观察者、请求对象、IO线程池 ::: |
- 第一部分
- 组装请求对象
- 送入IO线程池
- 第二部分
- 执行回调并通知
| image.png | | —- | —- |

事件循环

:::info 回调函数的土壤 ::: image.png

值得注意

  • Node提供libuv作为抽象封装层,完成平台兼容性判断
  • Node的单线程——仅仅只是 JavaScript执行在单线程中
  • 每一轮循环检查中,观察者优先级 idle观察者 > IO观察者 > check观察者 :::info idle观察者:process.nextTick
    I/O观察者:一般性的I/O回调,如网络,文件,数据库I/O等
    check观察者:setTimeout > setImmediate :::

    经典例子🌰

    nextTick + setImmidiate执行顺序

    | image.png | image.png
    setImmediate中的nextTick进入了下一个循环 | | —- | —- |

突然想到

优势 劣势
单线程 远离多线程死锁、状态同步问题
- CPU利用率低
- 容易阻塞
异步I/O 使单线程远离阻塞,更好使用CPU

来补充几个基础知识吧
1、操作系统的五种IO模型
1)阻塞式IO模型
image.png
2)非阻塞式IO模型
image.png
3)IO复用模型
image.png
4)信号驱动IO模型
image.png
5)异步IO
image.png