程序數量有限
代價太高(銷毀,上下文切換)
受限於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...