1、多程序模型的優缺點
2、多執行緒模型的優缺點
3、i/o多路復用的優缺點
(1)優點:
(2)缺點:
(1)優點:
(2)缺點:
(3)如何減少上下文切換
執行緒池的關鍵點是:
對於第一點,要求執行緒數盡量少,這樣可以減少執行緒切換和管理的開支;對於第二點,要求盡量多的執行緒,以保證cpu資源最大化的利用。 所以:
所以高併發,低耗時的情況:建議少執行緒,只要滿足併發即可。例如併發100,執行緒池可能設定為10就可以。低併發,高耗時的情況:建議多執行緒,保證有空閒執行緒,接受新的任務。例如併發10,執行緒池可能就要設定為20。高併發高耗時:1要分析任務型別,2增加排隊,3、加大執行緒數。
(1)優點:
(2)缺點:
(3)三種i/o多路復用方式介紹(參考這裡):
select的優缺點:
優點:
缺點:
poll的優缺點:
優點:
缺點:
epoll的優缺點(epoll詳解):
1)支援乙個程序開啟大數目的socket描述符(fd)
select 最不能忍受的是乙個程序所開啟的fd是有一定限制的,由fd_setsize設定,預設值是2048。對於那些需要支援的上萬連線數目的im伺服器來說顯 然太少了。這時候你一是可以選擇修改這個巨集然後重新編譯核心,不過資料也同時指出這樣會帶來網路效率的下降,二是可以選擇多程序的解決方案(傳統的 apache方案),不過雖然linux上面建立程序的代價比較小,但仍舊是不可忽視的,加上程序間資料同步遠比不上執行緒間同步的高效,所以也不是一種完 美的方案。不過 epoll則沒有這個限制,它所支援的fd上限是最大可以開啟檔案的數目,這個數字一般遠大於2048,舉個例子,在1gb記憶體的機器上大約是10萬左 右,具體數目可以cat /proc/sys/fs/file-max察看,一般來說這個數目和系統記憶體關係很大。
2)io效率不隨fd數目增加而線性下降
傳統的select/poll另乙個致命弱點就是當你擁有乙個很大的socket集合,不過由於網路延時,任一時間只有部分的socket是」活躍」的, 但是select/poll每次呼叫都會線性掃瞄全部的集合,導致效率呈現線性下降。但是epoll不存在這個問題,它只會對」活躍」的socket進行 操作—這是因為在核心實現中epoll是根據每個fd上面的callback函式實現的。那麼,只有」活躍」的socket才會主動的去呼叫 callback函式,其他idle狀態socket則不會,在這點上,epoll實現了乙個」偽」aio,因為這時候推動力在os核心。在一些 benchmark中,如果所有的socket基本上都是活躍的—比如乙個高速lan環境,epoll並不比select/poll有什麼效率,相 反,如果過多使用epoll_ctl,效率相比還有稍微的下降。但是一旦使用idle connections模擬wan環境,epoll的效率就遠在select/poll之上了。
參考:
IO模型 io多路復用(三)
兩者相互比較 1 如果只有乙個使用者連線server端,多路復用io還不如阻塞io效率高 2 相比阻塞io,多路復用io中間多了個反饋機制 3 多路復用io的 可以同時監控socket 多個socket物件coon1 coon2.recv 4 多路復用io可以識別有人連線某個coon3,然後告知有c...
IO多路復用 select poll和epoll
select include int select int maxfdp1,fd set restrict readfds,fd set restrict writefds,fd set restrict exceptfds,struct timeval restrict tvptr 引數描述 se...
IO復用 多程序和多執行緒三種併發程式設計模型
i o復用原理 讓應用程式可以同時對多個i o埠進行監控以判斷其上的操作是否可以進行,達到時間復用的目的。在書上看到乙個例子來解釋i o的原理,我覺得很形象,如果用監控來自10根不同地方的水管 i o埠 是否有水流到達 即是否可讀 那麼需要10個人 即10個執行緒或10處 來做這件事。如果利用某種技...