日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个故事讲清楚BIO NIO 异步

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个故事讲清楚BIO NIO 异步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請引用:一個故事講清楚NIO

  假設某銀行只有10個職員。該銀行的業務流程分為以下4個步驟:

1) 顧客填申請表(5分鐘);

2) 職員審核(1分鐘);

3) 職員叫保安去金庫取錢(3分鐘);

4) 職員打印票據,并將錢和票據返回給顧客(1分鐘)。

  我們看看銀行不同的工作方式對其工作效率到底有何影響。

1 BIO方式

  每來一個顧客,馬上由一位職員來接待處理,并且這個職員需要負責以上4個完整流程。當超過10個顧客時,剩余的顧客需要排隊等候。

  我們算算這個銀行一個小時到底能處理多少顧客?一個職員處理一個顧客需要10分鐘(5+1+3+1)時間,一個小時(60分鐘)能處理6個顧客,一共10個職員,那就是只能處理60個顧客。

  可以看到銀行職員的工作狀態并不飽和,比如在第1步,其實是處于等待中。

  這種工作其實就是BIO,每次來一個請求(顧客),就分配到線程池中由一個線程(職員)處理,如果超出了線程池的最大上限(10個),就扔到隊列等待

2 NIO方式

  如何提高銀行的吞吐量呢?

  思路:分而治之,將任務拆分開來,由專門的人負責專門的任務。

  具體來講,銀行專門指派一名職員A,A的工作就是每當有顧客到銀行,他就遞上表格讓顧客填寫,每當有顧客填好表后,A就將其隨機指派給剩余的9名職員完成后續步驟。

  我們計算下這種工作方式下銀行一個小時到底能處理多少顧客?

  假設顧客非常多,職員A的工作處于飽和中,他不斷的將填好表的顧客帶到柜臺處理,柜臺一個職員5分鐘能處理完一個顧客,一個小時9名職員能處理:9*(60/5)=108。

  可見工作方式的轉變能帶來效率的極大提升。

? ? ? 這種工作方式其實就NIO的思路。下圖是非常經典的NIO說明圖,mainReactor線程負責監聽server socket,accept新連接,并將建立的socket分派給subReactor;subReactor可以是一個線程,也可以是線程池(一般可以設置為CPU核數),負責多路分離已連接的socket,讀寫網絡數據,這里的讀寫網絡數據可類比顧客填表這一耗時動作,對具體的業務處理功能,其扔給worker線程池完成。

  可以看到典型NIO有三類線程,分別是mainReactor線程、subReactor線程、work線程。不同的線程干專業的事情,最終每個線程都沒空著,系統的吞吐量自然就上去了。

????????

?

3 異步方式

  第二種工作方式有沒有什么可以提高的地方呢?

  仔細查看可發現第3步驟這3分鐘柜臺職員是在等待中度過的,那怎么能讓柜臺職員保持滿負荷呢?

  還是分而治之的思路,指派1個職員B來專門負責第3步驟。每當柜臺員工完成第2步時,就通知職員B來負責與保安溝通取錢。這時候柜臺員工可以繼續處理下一個顧客。當職員B拿到錢之后,他會怎么辦呢?他會通知顧客錢已經到柜臺了,讓顧客重新排隊處理,當柜臺職員再次服務該顧客時,發現該顧客前3步已經完成,直接執行第4步即可。

  我們可以算算通過這種方法,銀行的吞吐量能提高到多少。

  假設職員B的工作非常飽和,柜臺一個職員現在2分鐘能處理完一個顧客,一個小時8名職員能處理:8*(60/2)=240。

  在當今web服務中,經常需要通過RPC或者Http等方式調用第三方服務,這里對應的就是第3步,如果這步耗時較長,通過異步方式將能極大降低資源使用率。

  jetty Continuations 就實現了上述異步方式,有興趣的同學可以去嘗試下(http://wiki.eclipse.org/Jetty/Feature/Continuations)。

  NIO+異步的方式能讓少量的線程(資源)做大量的事情,這適用于很多應用場景,比如代理服務、api服務、長連接服務等等,這些應用如果用同步方式將耗費大量機器資源。盡管NIO+異步能提高系統吞吐量,但其并不能讓一個請求的等待時間下降,相反可能會增加等待時間。

?4 小結

  總結就一句:“分而治之,將任務拆分開來,由專門的人負責專門的任務”,這不僅在計算機領域生效,在整個社會領域都生效。

轉載于:https://www.cnblogs.com/lixuwu/p/10746439.html

總結

以上是生活随笔為你收集整理的一个故事讲清楚BIO NIO 异步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。