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

    xiaoxiao2021-03-25  59

    伴随着异步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 调用图解

    这是一个例子

    整个异步调用的流程


    总结

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

    转载请注明原文地址: https://ju.6miu.com/read-33396.html

    最新回复(0)