常規的網路io事件分發模型,有常規io控制代碼非同步讀寫方式,select模式,以及我們常討論的iocp模式(linux為epoll模式)
根據我個人經驗,我剛開始接觸網路io包括本地檔案讀寫io等模式時,最開始僅僅知道控制代碼非同步io模式,這種模式僅僅是使用者層的對select的再實現,業務相關度很高,而且很不好控制,後來接觸到select模式,但是遇見到連線量過大時,select模式對cpu的消耗率太大,後來我開始了解並接觸iocp模式。
歸納總結設計乙個非同步io模型,一般要考慮一下幾點
1:併發量
能夠滿足一定數量的客戶端連線,常規機器下能夠達到萬級的連線量,同時考慮到檔案系統中對io控制代碼的記憶體分配問題,要考慮到控制代碼復用的問題,最開始我以為只有window下才可以實現控制代碼服用,後來發現linux也可以實現控制代碼復用
2:響應時間
當連線量達到一定程度後,我們關心的就是響應時間,簡單點就是業務的處理時間,如何設計乙個架構,保證在最短的時間內處理萬使用者的請求,並且將結果反饋給使用者,這個是最關鍵的,也是系統設計中最難的部分。我們常用的方法就是採用檔案控制代碼非同步io方式,但是即使這樣我們還要時刻監視,合適有讀寫事件發生,好在這些才做系統已經給我們提供了一種機制,window下採用iocp,linux下採用epoll模式,剩下的就是對業務模組的分析,要考慮怎樣處理業務才能做到"即時響應",在不考慮網路延時的情況下,如何讓客戶端在最短的時間內得到服務的響應,這在後面我們將具體討論
3:io模型
這也是乙個業務系統架構最基礎,而且是最難的部分之一,我們要考慮如何設計乙個業務不相關的io模型,讓系統間的耦合度降到最低,理由就是io模型是系統中最關鍵的部分,每當業務中有修改的時候,常常涉及到io部分的改動,如果沒有乙個很好的io模型,再談系統間的耦合,基本上就是扯蛋。
4:多執行緒
5:執行緒安全
採用多執行緒模式設計業務系統,我們就要考慮執行緒安全
6:執行緒模型封裝
這裡我比較推崇微軟的訊息機制,這種執行緒的封裝模型有點就是在設計業務是簡單,介面靈活性高。擴充套件性強。具體我們在後面將仔細討論。
7:系統模組化設計,用乙個比較文的詞就是分布式,但是這個概念太大,我不敢用,不是怕看者噴我,而是這個概念不是乙個程序內部開幾個多執行緒,在使用非同步io就能搞定的東西。我們將在後面逐步的深入。
最後我想說的是考慮到有些人可能是剛剛接觸iocp(epoll)或者是系統設計,接觸能力等問題,我前幾篇會更多的討論非同步io設計的幾處理論,否則我寫這篇文章沒有任何意義,大家可以上網搜尋一堆資料,我估計看完後即使不編碼也知道個大概。
socket模型 非同步事件選擇模型的正常退出
今天要用到非同步事件選擇模型,發現demo原型不能正常退出.除錯了一下,用wsasetevent waitforsingleobject 全域性標記搞定.如果以後要用到非同步事件選擇模型,在這個demo上直接加業務邏輯.srcasynceventselect.zip include stdafx.h...
一介面多實現「事件分發」實現
public class voicestateclient return mclient 定義乙個介面 public inte ce voicestatelistener public static setmstatelisteners new hashset 每次呼叫該介面的時候,遍歷分發事件,為...
非同步IO網路伺服器設計 一 IO模型
說到非同步io網路伺服器,全國人民都知道 windows下用iocp,linux下用epoll 無數的高手寫過文章來講iocp和epoll相關的文章。本人分別使用epoll和iocp開發過網路庫,也使用過boost.asio,試歸納如下 epoll 1.通過epoll ctl向非同步io註冊註冊 亦...