最近天天吃沙縣, 就拿沙縣分析
BIO
Block I/O

- 沙縣分析
相近時間來了4個顧客
| 顧客 | 菜品 | 時間 |
|---|---|---|
| A | 筒骨飯 | 5min |
| B | 茄子肉絲蓋飯 | 7min |
| C | 豬腳飯 | 3min |
| D | 茄子肉絲蓋飯 | 7min |
老板只能按照順序 5+7+3+7 = 22分鐘完工
每次做完一個菜, 還要問下一個顧客點的是什么(一心不能二用, 記不住<顧客, 菜品>鍵值對)
此時我們(用戶)關心的是什么時候老板問到我要吃什么
NIO
non-blocking I/O
服務端運行多個客戶端發(fā)送消息, 不會阻塞

- 沙縣分析
相近時間來了4個顧客
| 顧客 | 菜品 | 時間 |
|---|---|---|
| A | 筒骨飯 | 5min |
| B | 茄子肉絲蓋飯 | 7min |
| C | 豬腳飯 | 3min |
| D | 茄子肉絲蓋飯 | 7min |
每一個handler(鍋)只能處理一個菜品(可能要求比較高的飯店, 怕串味)
時間為 7+7 = 14分鐘完工
多路復用
每個handler(鍋)可以處理任何菜品(高效出餐)
時間為 Math.min(5, 7 ,3) + 7 = 10分鐘完工
單線程+隊列下的<偽>NIO
沒有block的IO就是NIO
我們學校附近的沙縣屬于小本生意, 只有老板和和老板娘
人多的時候老板娘負責記菜, 老板負責炒菜

- 沙縣分析
每次顧客等的有點急了, 老板娘都安慰說<在炒了>
那我們也不知道在沒在炒, 萬一真在炒了,還是等一下吧??????
此時我們(用戶)關心的是什么時候能開始炒我的菜
如果是BIO, 那有沒有炒就一目了然了
AIO
Asynchronous I/O 異步IO
我們在NIO中引入了分發(fā)器和處理器的關系
而AIO就是優(yōu)化了分發(fā)器和處理器

- 沙縣分析
老板(后廚)對應內(nèi)核區(qū), 老板娘(前臺)對應分發(fā)器, 我們對應處理器(處理食物)
那我們天天去吃, 跟老板也熟了,跟老板要了電話號碼
我們要吃的時候, 跟老板說要兩份, 放在3號桌
老板放菜到了3號桌, 老板娘問這菜誰的啊, 原來是那兩小子
老板娘就打電話給我們, 說做好了, 我們馬上跑到3號桌, 處理食物
此時我們(用戶)關心的是什么時候菜上好
參考文章
Java NIO淺析(美團) https://tech.meituan.com/2016/11/04/nio.html
浙公網(wǎng)安備 33010602011771號