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