《深入浅出Node.js》读书笔记+个人思考(二):异步I/O

伴随着异步I/O的还有事件驱动和单线程,它们构成Node的基调
利用单线程,远离多线程死锁、状态同步等问题;利用异步I/O,让单线程远离阻塞,以更好地使用CPU


这里写图片描述


异步 I/O实现现状

类比:

  • 点菜的人 -> 应用层
  • 点菜员 -> 观测者
  • 点菜 -> 事件
  • 厨师(厨房) -> 系统内核
  • 一个点菜台 -> 一I/O线程

操作系统对I/O的实现

  • 阻塞I/O:点菜排队,你站在点菜台前点完菜后等待厨师把你的菜做好再到下一个人(肯德基)

这里写图片描述

  • 非阻塞I/O:点菜排队,你点完菜后拿着小票在一边等待,下一个人来点菜(饭店)

    • 使用轮播技术
    • 大部分轮询技术:你需要不时地去点菜台询问菜是否做好了,期间不干别的事情
    • epoll轮询技术:你站在一旁发呆,什么事也不干,菜烧好了有服务员叫号通知

    这里写图片描述


理想的非阻塞异步I/O :

点完菜,拿着小票在一旁刷个微博,逛个朋友圈,菜做好了服务员叫号,你去取

这里写图片描述

现实的异步I/O:

到a点菜台点海鲜,拿个小票,到b点菜台点甜点,拿个小票……到一旁玩手机,哪个点菜台叫号了就去拿哪个

这里写图片描述


Node架构

这里写图片描述

Node的异步I/O

不多说,上图,最清晰

这里写图片描述

执行每次循环叫做Tick

可以想象每次厨师出来询问点菜员是否还有客人点菜,就和上图判断是否还有事件一样

fs.open 调用图解

这是一个例子

这里写图片描述

整个异步调用的流程

这里写图片描述


总结

每次不知道异步是啥东西,就想自己在饭店是怎么点菜的就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值