7.3.2 非阻塞IO(non-blocking IO)
生活随笔
收集整理的這篇文章主要介紹了
7.3.2 非阻塞IO(non-blocking IO)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux下,可以通過設置socket使其變為non-blocking。
當對一個non-blocking socket執行讀操作時,流程是這個樣子:
從圖中可以看出,當用戶進程發出read操作時,如果kernel中的數據還沒有準備好,那么它并不會block用戶進程,而是立刻返回一個error。
用戶進程判斷結果是一個error時,它就知道數據還沒有準備好,于是用戶就可以在本次到下次再發起read詢問的時間間隔內做其他事情,或者直接再次發送read操作。
一旦kernel中的數據準備好了,并且又再次收到了用戶進程的system call,那么它馬上就將數據拷貝到了用戶內存(這一階段仍然是阻塞的),然后返回。
也就是說非阻塞的recvform系統調用調用之后,進程并沒有被阻塞,內核馬上返回給進程,如果數據還沒準備好,此時會返回一個error。
進程在返回之后,可以干點別的事情,然后再發起recvform系統調用。
重復上面的過程,循環往復的進行recvform系統調用。
這個過程通常被稱之為輪詢。
輪詢檢查內核數據,直到數據準備好,再拷貝數據到進程,進行數據處理。
需要注意&#
總結
以上是生活随笔為你收集整理的7.3.2 非阻塞IO(non-blocking IO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.3.1 阻塞IO(blocking
- 下一篇: 7.3.3 多路复用IO(IO mult