本文圖片均來自網絡網絡
1、同步IO---Blocking IOorm
在Blocking IO模型中,用戶空間的應用程序執行一個系統調用(recvform),這會致使應用程序阻塞,直到數據準備好,而且將數據從內核空間複製到用戶空間,最後進程纔會去處理數據,在等待數據和複製數據這兩個過程,整個進程都被阻塞。大體過程以下圖:進程
2、同步非阻塞IO---NonBlocking IO圖片
在NonBlocking IO模型中,IO設備是以非阻塞的形式打開的,若是IO操做還未完成,read操做會獲得一個錯誤碼。用戶進程會每隔一段時間,就會read一次(輪詢),直到有數據返回表示IO結束。非阻塞IO也會進行recvform系統調用,檢查數據是否準備好,與阻塞IO不一樣的是「非阻塞將大的整片時間的阻塞分紅N多小的阻塞,因此進程在沒兩個小的阻塞之間可能會得到CPU資源」。資源
詳細的說:NonBlocking IO的recvform系統調用以後,進程並無被阻塞,內核立刻返回給進程,若是數據尚未準備好,就返回一個Error。進程在返回以後,能夠繼續去搶佔CPU資源,作一些別的工做。而後在適當的時間在發起一次recvform系統調用,重複上述過程。須要注意的是從內核空間拷貝數據到用戶空間的時候,NonBlocking IO模型的進程也是阻塞的。大體過程如圖:同步