到目前爲止已經將將四個IO模型都介紹完了。
那麼啊阻塞IO、非阻塞IO、同步IO和異步IO的區別在哪?
阻塞IO和非阻塞IO的區別
調用blocking IO會一直block住對應的進程直到操作完成,而non-blocking IO在kernel還準備數據的情況下會立刻返回。
同步IO和異步IO的區別
兩者的區別就在於synchronous IO做”IO operation”的時候會將process阻塞。
經過上面的介紹,會發現non-blocking IO和asynchronous IO的區別還是很明顯的。
在non-blocking IO中,雖然進程大部分時間都不會被block,但是它仍然要求進程去主動的check,並且當數據準備完成以後,也需要進程主動的再次調用recvfrom來將數據拷貝到用戶內存。
而asynchronous IO則完全不同,它就像是用戶進程將整個IO操作交給了他人(kernel)完成,然後他人做完後發信號通知,在此期間,用戶進程不需要去檢查IO操作的狀態,也不需要主動的去拷貝數據。