服務器端編程經常需要構造高性能的IO模型
IO模型主要分為:
阻塞IO、非阻塞IO、多路復用IO、信號驅動IO以及異步IO。
1.阻塞式IO
應用進程被阻塞,知道數據復制到應用進程緩沖區才返回。在阻塞過程中,其他程序還可以執行,因此阻塞并不意味著整個操作系統被阻塞。因為其他程序還可以運行,因此不消耗CPU時間,這種模型的CPU利用率會比較高。
2.非阻塞IO
應用程序執行系統調用之后,內核返回一個錯誤碼。應用程序還可以繼續運行,但是需要不斷的執行系統調用來獲知IO是否完成,這種方式成為輪詢。
由于CPU要處理更多的系統調用,因此這種模型的CPU利用率比較低。
3.IO復用
使用select或者poll等待數據,并且可以等待多個套接字中的任何一個變為可讀。這一過程會被阻塞,當某一個套接字可讀時返回,之后使用recvfrom把數據從內核復制到進程中。
它可以讓但個進程具有處理多個I/O事件的能力,又被稱為Event Driven IO,即事件驅動IO。
4.信號驅動IO
應用進程使用sigaction系統調用,內核立即被返回,應用進程可以繼續執行,也就是說等待數據階段應用程序時非阻塞的。內核在數據到達時向應用進程發送SIGIO信號,應用進程收到之后在信號處理程序中調用recvfrom將數據從內核中復制到應用進程。
相比于非阻塞IO的輪詢方式,信號驅動I/O的CPU利用率更高。
5.異步IO
應用進程執行aio_read系統調用會立即返回,應用進程可以繼續執行,不會被阻塞,內核會在所有操作完成之后向應用進程發送信號。
異步IO與信號驅動IO的區別在于,異步IO的信號是通知應用進程IO完成,而驅動IO的信號是通知應用程序可以開始IO。
以上就是常見的五種IO模型介紹,需要圖解或詳細教學的可以私信或評論聯系我。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。