網(wǎng)絡IO模型

內(nèi)核空間與用戶空間

  • 操作系統(tǒng)內(nèi)核

可以訪問受保護的內(nèi)存空間,擁有訪問底層硬件設備的所有權限。

為了保護內(nèi)核的安全,操作系統(tǒng)將虛擬空間劃分為:

  • 內(nèi)核空間(內(nèi)核代碼運行的地方)
  • 用戶空間(用戶程序代碼運行的地方)

內(nèi)核空間和用戶空間是隔離的。用戶程序不能直接操作內(nèi)核,需要通過系統(tǒng)調(diào)用來與內(nèi)核進行通信。

socket的出入

https://blog.csdn.net/fen_liu/article/details/120410870
對于一個socket的出入操作,通常包括兩個階段:

  • 等待數(shù)據(jù)從網(wǎng)絡中到達(數(shù)據(jù)到達后,被復制到內(nèi)核的緩沖區(qū))
  • 把數(shù)據(jù)從內(nèi)核緩沖區(qū)復制到用戶應用進程緩沖區(qū)

五種IO模型

阻塞式I/O

  • 解釋

當應用進程調(diào)用了recv()這個系統(tǒng)調(diào)用,操作系統(tǒng)就開始了IO的第一個階段,用戶這邊,整個進程會被阻塞,當內(nèi)核等到數(shù)據(jù)準備好了,將數(shù)據(jù)從內(nèi)核拷貝到用戶內(nèi)存,然后內(nèi)核返回結果,用戶進程解除阻塞。

  • 特點

在IO的兩個階段都阻塞;阻塞式不消耗CPU時間。

  • 場景

阻塞 Socket、Java BIO。適用并發(fā)較小的網(wǎng)絡應用,并發(fā)較大的不適用,因為一個請求 IO 阻塞進程,就要為每個請求分配一個進程(線程)來響應,開銷大。

非阻塞式I/O

  • 解釋

當用戶進程發(fā)出 recv() 操作時,如果內(nèi)核中的數(shù)據(jù)還沒有準備好,那么它并不會阻塞用戶進程,而是立刻返回一個錯誤碼。一旦內(nèi)核中的數(shù)據(jù)準備好了,并且又再次收到了用戶進程的系統(tǒng)調(diào)用,那么它馬上就將數(shù)據(jù)拷貝到了用戶內(nèi)存,然后返回。

  • 特點

在第二階段阻塞;進程輪詢調(diào)用(polling),消耗 CPU 資源。

  • 場景

SOCKET 設置 NON BLOCKING 屬性。支持并發(fā)量小,不用及時響應的網(wǎng)絡應用。

IO多路復用(事件驅動)

  • 解釋

當用戶進程調(diào)用了 select(poll、epoll),那么整個進程會被阻塞,而此時,內(nèi)核會監(jiān)視所有 select 負責的 socket,當任何一個 socket 中的數(shù)據(jù)準備好了,select 就會返回。這個時候用戶進程再調(diào)用 recv 操作,將數(shù)據(jù)從內(nèi)核拷貝到用戶進程。

  • 特點

第一階段在select上阻塞,第二階段依舊阻塞;性能好,Reactor模式。

  • 場景

Java NIO,Nginx。適用高并發(fā)服務應用開發(fā),一個進程/線程響應多個請求。

https://mp.weixin.qq.com/s/3gC-nUnFGv-eoSBsEdSZuA
https://cloud.tencent.com/developer/article/1586974

信號驅動式I/O

  • 解釋

應用進程使用 sigaction 系統(tǒng)調(diào)用,內(nèi)核立即返回,應用進程可以繼續(xù)執(zhí)行,也就是說等待數(shù)據(jù)階段應用進程是非阻塞的。內(nèi)核在數(shù)據(jù)到達時向應用進程發(fā)送 SIGIO 信號,應用進程收到之后在信號處理程序中調(diào)用 recv()將數(shù)據(jù)從內(nèi)核復制到應用進程中。

  • 特點

特點:第二階段阻塞;通知機制,不是輪訓;CPU利用高于非阻塞式IO。

異步I/O

  • 解釋

應用進程執(zhí)行 aio_read 系統(tǒng)調(diào)用會立即返回,應用進程可以繼續(xù)執(zhí)行,不會被阻塞,內(nèi)核會在所有操作完成之后向應用進程發(fā)送信號。

  • 特點

兩個階段都不會阻塞;異步 I/O 的信號是通知應用進程 I/O 完成,而信號驅動 I/O 的信號是通知應用進程可以開始 I/O。

  • 場景

Java 7 AIO、高性能服務器,高性能高并發(fā)。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容