IO模型就是操做數據輸入輸出的方式,在Linux系統中有5大IO模型:阻塞式IO模型、非阻塞式IO模型、IO複用模型、信號驅動式IO模型、異步IO模型。 由於學習Netty必不可少的要了解IO多路複用模型,本篇是基礎。編程
進程調用recvfrom函數,在數據沒有返回以前,進程阻塞,直到數據返回後,纔會處理數據。網絡
進程調用recvfrom函數,若是數據沒有準備好就返回錯誤提示,以後進程循環調用recvfrom函數,直到有數據返回。異步
進程調用select,若是沒有套接字變爲可讀,則阻塞,直到有可讀套接字以後,調用recvfrom函數,返回結果。socket
進程先註冊信號驅動,以後進程不阻塞,當數據準備好後,會給進程返回信號提示,這時進程調用ecvfrom函數,返回數據。async
由POSIX規範定義,應用程序告知內核啓動某個操做,並讓內核在整個操做(包括將數據從內核拷貝到應用程序的緩衝區)完成後通知應用程序。這種模型與信號驅動模型的主要區別在於:信號驅動I/O是由內核通知應用程序什麼時候啓動一個I/O操做,而異步I/O模型是由內核通知應用程序I/O操做什麼時候完成。函數
阻塞越少,理論上性能也越優。性能
所以在Linux下網絡編程都以IO複用模型爲主。學習