在使用Multiplexed I O的情況下,還有必要使用Non Blocking I O麼

時間 2021-06-03 01:21:51

1樓:福柯船長

使用IO Multiplexing 並不關心socket是不是blocking的,但是在邊緣觸發的IO Multiplexing上,最好使用non-blocking。

以讀操作為例,邊緣觸發時,只有在收到新資料時才會提醒,所以為了避免漏掉資料,你需要一次讀完,但是你並不知道總共有多少資料,你傳入read()的緩衝區的大小可能是不夠的,所以你應該在乙個while迴圈裡不斷地read(socket),如果socket是non-blocking的,那麼當你讀完資料時最後乙個read可以返回錯誤資訊,而如果此socket是blocking的,那麼你的最後乙個read操作會阻塞,這不會是你想要的...

2樓:Zeson

是對Ready的Socket沒錯,但是它的Ready是指一旦有資料就Ready,就被select選中,然後讀。但沒讀到你要求的資料量的時候就會停在那。

也就是堵在讀某個具體的Socket上,你用select來選擇讀哪個Socket的目的就達不到了。

3樓:

select是幫你對1-1024個檔案描述符乙個個去試,如果哪個可以讀了,就告訴你,這裡有可以讀的檔案描述符了。然而如果是阻塞式的io,你在試的時候已經阻塞住了,還哪有什麼乙個個試呢。非阻塞的io才能說我試一下,得到成功或者不成功。

4樓:羅伊

水平觸發的可以是block的,邊緣觸發的必須是nonblock。select只支援水平觸發是可以block模式的,也可以 nonblock的。最好是nonblock模式吧,極端情況下select,poll返回不一定真的可讀寫,而且write是會阻塞的。

在使用 LaTeX 排版時,如何使用 (振假名)?

振假名標註實現得最好的是 LuaTeX ja 巨集包 CTAN Package luatexja 的外掛程式 luatexja ruby TeX encoding UTF 8 TeX program LuaLaTeX documentclass usepackage usepackage ltjse...

你在深度使用哪個軟體,怎麼深度使用的?

雲盒子 看我賬號,就知道要答的是雲盒子企業網盤。每天開機自動登入,在關注檔案的彈窗提醒列表裡,感興趣的就點開看看,接著從最近訪問列表找檔案,開啟一天的工作 遇到加班,二話不說,先登入雲盒子再說 每週更新1 2次,體驗到最新功能和最新鮮的bug 遇到需求,在雲盒子解決範圍內,5秒鐘能迅速組織好幾個不同...

在使用 Lonely Planet 旅行指南的時候遇到過什麼問題嗎?

哈哈哈哈 難道沒有人從文字的角度吐槽一下?感覺所有的漢語都像是,英文直接Google翻譯的!只能做到通順而已,但是讀起來非常奇怪! 尼泊爾本 推薦的餐廳很平庸,建議去與中國臨近的國家不要參考LP推薦餐廳,還不如直接看當地人吃什麼小吃最多然後嘗一下 比攻略上好吃多了而且還便宜。廣西本 介紹詳細,但沒有...