“什麼是IO的多路復用機制?” 這是一道年薪50W的面試題,很遺憾,99%的人都回答不出來。 大家好,我是Mic,一個工作了14年的Java程式員。 今天,給大家分享一道網路IO的面試題。 這道題目的文字回答已經整理到了15W字的面試文檔裡面,大家可以S我領取。 下麵看看高手的回答。 高手: IO多 ...
“什麼是IO的多路復用機制?”
這是一道年薪50W的面試題,很遺憾,99%的人都回答不出來。
大家好,我是Mic,一個工作了14年的Java程式員。
今天,給大家分享一道網路IO的面試題。
這道題目的文字回答已經整理到了15W字的面試文檔裡面,大家可以S我領取。
下麵看看高手的回答。
高手:
IO多路復用機制,核心思想是讓單個線程去監視多個連接,一旦某個連接就緒,也就是觸發了讀/寫事件。
就通知應用程式,去獲取這個就緒的連接進行讀寫操作。
也就是在應用程式裡面可以使用單個線程同時處理多個客戶端連接,在對系統資源消耗較少的情況下提升服務端的鏈接處理數量。
在IO多路復用機制的實現原理中,客戶端請求到服務端後,此時客戶端在傳輸數據過程中,為了避免Server端在read客戶端數據過程中阻塞,服務端會把該請求註冊到Selector復路器上,服務端此時不需要等待,只需要啟動一個線程,通過selector.select()阻塞輪詢復路器上就緒的channel即可,也就是說,如果某個客戶端連接數據傳輸完成,那麼select()方法會返回就緒的channel,然後執行相關的處理就可以了。
常見的IO多路復用機制的實現方式有: select 、poll、epoll。
這些都是Linux系統提供的IO復用機制的實現,其中select和poll是基於輪詢的方式去獲取就緒連接。
而epoll是基於事件驅動的方式獲取就緒連接。從性能的角度來看,基於事件驅動的方式要優於輪詢的方式。
總結
IO多路復用機制,是非常重要的網路通信基礎。
在平時的業務開發中,使用比較少,但是在中間件裡面作為基礎通信模型,是每個高級工程師必須要掌握的內容。
大家記得點贊、收藏加關註。
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!