I/O模式總結

進程讀取數據時要通過兩個階段:異步

1.等待內核準備數據;socket

2.將內核緩衝區中的數據複製到進程緩衝區中。spa

1、阻塞IO對象

進程會阻塞在等待內核準備數據和數據從內核空間複製到用戶空間這兩個階段。blog

2、非阻塞IO進程

進程讀取數據時,若是內核數據尚未準備好,則會當即返回一個錯誤告訴進程數據還沒準備好。因此程序必須不斷輪詢詢問內核數據到底準備好了沒。事件

當內核準備好數據後,此模式仍是會阻塞在從內核複製數據到用戶空間的過程當中,因此此模式仍是屬於同步IO。同步

3、IO多路複用select

監聽多個IO對象,當對象上有事件發生時,通知進程。例如select,epoll。程序

以select爲例,用戶進程會阻塞在select調用上,等待有哪些socket變成可讀狀態(此階段屬於內核數據準備階段,即等待網卡獲取到數據)。

當有socket變爲可讀狀態後,用戶調用recvfrom,又會阻塞在複製內核數據到進程的過程當中。

因此多路複用模式的優點不是比阻塞IO處理單鏈接更快,而是可以在單進程中處理更多的鏈接。

4、異步IO(上面三個均屬於同步IO

用戶調用異步讀取後當即返回,而後能夠去作其餘工做,當內核數據準備好,而且將數據從內核空間複製到用戶空間後會發出信號通知進程處理。

 

相關文章
相關標籤/搜索