【Java面試】什麼是IO的多路復用機制?

  • 2022 年 8 月 11 日
  • 筆記

「什麼是IO的多路復用機制?」

這是一道年薪50W的面試題,很遺憾,99%的人都回答不出來。

大家好,我是Mic,一個工作了14年的Java程式設計師。

今天,給大家分享一道網路IO的面試題。

這道題目的文字回答已經整理到了15W字的面試文檔裡面,大家可以S我領取。

下面看看高手的回答。

高手:

IO多路復用機制,核心思想是讓單個執行緒去監視多個連接,一旦某個連接就緒,也就是觸發了讀/寫事件。

就通知應用程式,去獲取這個就緒的連接進行讀寫操作。

也就是在應用程式裡面可以使用單個執行緒同時處理多個客戶端連接,在對系統資源消耗較少的情況下提升服務端的鏈接處理數量。

在IO多路復用機制的實現原理中,客戶端請求到服務端後,此時客戶端在傳輸數據過程中,為了避免Server端在read客戶端數據過程中阻塞,服務端會把該請求註冊到Selector復路器上,服務端此時不需要等待,只需要啟動一個執行緒,通過selector.select()阻塞輪詢復路器上就緒的channel即可,也就是說,如果某個客戶端連接數據傳輸完成,那麼select()方法會返回就緒的channel,然後執行相關的處理就可以了。

image-20220710155428180

常見的IO多路復用機制的實現方式有: select 、poll、epoll。

這些都是Linux系統提供的IO復用機制的實現,其中select和poll是基於輪詢的方式去獲取就緒連接。

而epoll是基於事件驅動的方式獲取就緒連接。從性能的角度來看,基於事件驅動的方式要優於輪詢的方式。

總結

IO多路復用機制,是非常重要的網路通訊基礎。

在平時的業務開發中,使用比較少,但是在中間件裡面作為基礎通訊模型,是每個高級工程師必須要掌握的內容。

大家記得點贊、收藏加關注。

file

版權聲明:本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!