IO多路復用的引出(為什麼要用IO多路復用)

2021-10-13 14:46:15 字數 357 閱讀 8198

程序數量有限

代價太高(銷毀,上下文切換)

受限於cpu

記憶體隔離

程序間通訊代價高

以上都是不可避免的的

受限於cpu

那麼影響的是響應能力(例如1000個執行緒都在發收)全部排程,響應能力肯定受影響

阻塞那麼會有同學說改為非阻塞不就行了嗎?

那麼改為非阻塞不能完成收發資訊就會結束,那麼迴圈檢測(eagain)雖然可以,但是無法感知io,需要更多的cpu時間,效率明顯不高。

以上都是不可避免的,所以引出了io多路復用(io多路轉接)【select,poll,epoll】

感知io(可讀可寫是否出錯)是否就緒

為什麼Linux的IO多路復用技術需要用非堵塞IO

1 對於read操作。當緩衝區有資料時,堵塞io與非堵塞io都是能讀多少資料就讀多少資料讀完立即返回,返回值為讀取到的位元組數。當緩衝區為空時,對於堵塞io會堵塞住,cpu會切換給其他程序或者執行緒 對於非堵塞io,read函式會返回 1並且設定錯誤碼為eagian或者ewouldblock。2 對...

IO的多路復用

使用select函式實現io多路復用 include include include include 1 select int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout...

Redis的I O多路復用

為什麼 redis 中要使用 i o 多路復用這種技術呢?首先,redis 是跑在單執行緒中的,所有的操作都是按照順序線性執行的,但是由於讀寫操作等待使用者輸入或輸出都是阻塞的,所以 i o 操作在一般情況下往往不能直接返回,這會導致某一檔案的 i o 阻塞導致整個程序無法對其它客戶提供服務,而 i...