JAVA IO 通俗解釋

以網購之後到貨爲例簡單解釋JAVA各IO模型:

  1. 阻塞 IO 模型(BIO):付款完了什麼也不幹,自己不斷問貨物是否到了,直到貨物到了拿了快遞再去做別的事兒。(效率很低,用戶線程直接阻塞)

  2. 非阻塞 IO 模型:買完了自己每隔一段時間就去問一下貨物是否送到了,問詢的間隔期間可以暫時去幹別的事兒。(用戶線程仍被大量問詢操作佔用)

  3. 多路複用 IO 模型(NIO):託一個專人(Selector)去幫自己不斷地問貨物是否送到了,一個小區可能有很多像我這樣的人,這個專人可以幫所有客戶詢問到貨情況(各Channel的到貨事件註冊到Selector)。這期間我和其他人可以去做別的事兒。如果某人貨物到了,問詢的人需要等待這個人收貨完成,再繼續幫其他人輪詢,如果這個取貨的人很慢,其他人的問詢都要等待。(NIO:問詢是由內核線程完成,用戶線程可繼續執行)

  4. 信號驅動 IO 模型:給快遞點留了個電話,如果到貨了會通知我(事件註冊),就可以去幹其他的事兒。一旦接到通知,我去快遞點取回貨物(調用IO操作,取回數據,這個還是要用戶線程參與,不過已經很高效了)。

  5. 異步 IO 模型(AIO),最完美的模型:付款完成,給快遞點留了個電話(事件註冊),就可以去幹其他的事兒,快遞到貨後,快遞員把貨物送到家裏來,通知你貨物到了,我直接拆箱收貨。(問詢及數據取回無需用戶線程干預,由內核完成,用戶線程得到通知後直接使用數據,無需IO讀寫操作。)

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