《深入淺出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 調用圖解

這是一個例子

這裏寫圖片描述

整個異步調用的流程

這裏寫圖片描述


總結

每次不知道異步是啥東西,就想自己在飯店是怎麼點菜的就行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章