3.6.1.非阻塞IO
本節講解什么是非阻塞IO,如何將文件描述符修改為非阻塞式
3.6.1.1、阻塞與非阻塞
(1)阻塞是指函數調用會被阻塞。本質是當前進程調用了函數,進入內核里面去后,因為當前進程的執行條件不滿足,內核無法里面完成操作,就掛起這個進程,去執行其他進程。默認使用阻塞IO
 (2)非阻塞IO當條件不滿足時直接停止當前操作,退出程序(?)。或者非阻塞IO條件不滿足時會一直占用CPU資源
 (3)結合程序狀態轉換圖一起理解
3.6.1.2、為什么有阻塞式
 (1)常見的阻塞:wait、pause、sleep等函數;read或write某些文件時
 wait等待回收子進程:當子進程沒死,父進程就不能回收子進程,內核就阻塞住父進程,知道子進程死去稱為僵尸進程,這時內核就會發一個信號給父進程,父進程就會被喚醒,去回收子進程。
(2)阻塞式的好處
 非常有利于OS的性能發揮。阻塞時不會占用CPU,CPU可以去執行其他。
3.6.1.3、非阻塞
(1)為什么要實現非阻塞
 (2)如何實現非阻塞IO訪問:O_NONBLOCK和fcntl
a -- 阻塞
 阻塞操作是指在執行設備操作時,若不能獲得資源,則掛起進程知道滿足可操作的條件后再進行操作;被掛起的進程進入休眠狀態(放棄CPU),被從調度器的運行隊列移走,直到等待的條件被滿足;
 b -- 非阻塞
 非阻塞的進程在不能進行設備操作時,并不掛起(繼續占用CPU),它或者放棄,或者不停地查詢,直到可以操作為止;
 二者的區別可以看應用程序的調用是否立即返回!
轉載于:https://www.cnblogs.com/Ocean-Star/p/9245364.html
總結
以上是生活随笔為你收集整理的3.6.1.非阻塞IO的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 一辆小汽车每小时行80千米,三分之二小时
- 下一篇: 成都欢乐谷租童车多少钱
