服務端會創建一個執行緒 專門讀取此client的IO事件
當沒有任何可讀的數據或是數據還沒讀完 則此執行緒將會掛起 (即所謂的阻塞狀態?)
等到數據讀完 服務端參考數據之後 服務端就會安排client要做什麼事情或是一些業務的處理..
做完要做的事情之後 再反覆掛起 讀數據..
小型的服務器或許用這樣的架構是不錯 淺顯易懂 理解簡單(至少我能理解XD) 但是當達到大量的連接處理業務時
排山倒海的執行緒 有可能會讓服務器硬體資源吃不消 導致崩潰等等...
所以我在網路上查詢了相關資訊 發現了NIO這玩意
NIO與IO我看起來的差別是 NIO對於所有客戶端的IO事件採取了一個執行緒 來管理處理所有客戶端的IO事件
上面我提到的 IO模型是一個客戶端連接 開一個執行緒 來處理IO事件
NIO模型我理解的是一個執行緒處理所有客戶端的IO事件
但我的疑問來了
如果真的可以用這麼少的資源開銷來管理這麼多client IO事件
那對於client來說 會不會有不順暢的情形發生?
我的理解是 NIO是對每個client做"IO事件"做輪詢 一個一個來處理
如果當前連接有10000個client 當輪詢進度到第5XXX個時
5XXX前面幾個剛好又有IO數據事件來到時 那這樣會不會有處理不順暢的問題產生呢?
IO與NIO迷思具體性的差別除了"資源的消耗"以外 以及"IO事件讀取響應順暢度"的問題
那我們到底該怎麼看這些問題 該怎麼去選擇去處理呢?
你應該想成使用 non-blocking Socket 有機會讓你選擇只用一個 thread,是不是要開更多 thread 可以看使用量來決定。
歡迎光臨 CodeData 技術論譠 (http://codedata.com.tw/forum/) | Powered by Discuz! 7.2 |