概览
整个异步IO流程
:::info
Node异步IO模型四个基本要素: 事件循环、观察者、请求对象、IO线程池
:::
|
- 第一部分
- 组装请求对象
- 送入IO线程池
- 第二部分
- 执行回调并通知
| |
| —- | —- |
事件循环
值得注意
- Node提供libuv作为抽象封装层,完成平台兼容性判断
- Node的单线程——仅仅只是 JavaScript执行在单线程中
- 每一轮循环检查中,观察者优先级 idle观察者 > IO观察者 > check观察者
:::info
idle观察者:process.nextTick
I/O观察者:一般性的I/O回调,如网络,文件,数据库I/O等
check观察者:setTimeout > setImmediate :::经典例子🌰
nextTick + setImmidiate执行顺序
| |
setImmediate中的nextTick进入了下一个循环 | | —- | —- |
突然想到
优势 | 劣势 | |
---|---|---|
单线程 | 远离多线程死锁、状态同步问题 | - CPU利用率低 - 容易阻塞 |
异步I/O | 使单线程远离阻塞,更好使用CPU |
来补充几个基础知识吧
1、操作系统的五种IO模型
1)阻塞式IO模型
2)非阻塞式IO模型
3)IO复用模型
4)信号驱动IO模型
5)异步IO