1、五種I/O模型:異步
阻塞I/O,非阻塞I/O,I/O複用模型,信號驅動I/O,異步I/O
前四種屬於同步iO,最後一種屬於異步IO。由於前四種真正的I/O操做將阻塞進程。異步I/O不致使請求被進程阻塞。由內核完成I/O操做。函數
一、阻塞IOblog
二、非阻塞IO進程
非阻塞IO,recv返回錯誤-1(EWOUDBLOCK) 不多用,數據未到的這段時間,數據要一直循環接收(忙等待)同步
三、IO複用模型select
管理多個文件描述符,一旦其中一個描述符或多個有數據到來,select就返回。這時再調用recv就不會再阻塞了。循環
四、信號驅動IO請求
用戶空間程序能夠安裝信號處理函數,安裝以後,程序處理其餘任務。一旦有數據到來,用信號來通知信號處理程序,信號處理程序來讀取數據。程序
五、異步IOim
異步IO與信號驅動IO的區別在於,異步IO中內核將內核緩衝區數據寫入到用戶緩衝區(推)以後才發信號給進程來處理數據;而信號驅動IO模型中,內核有數據到來時發信號通知進程
由進程的信號處理函數recv來從內核讀取數據(拉)。