9.1分,尼瑪,坑誰呢。。。。。
看這裡,比較客觀
muduo適用於什麼環境?
muduo的官方一句話自我介紹是:a c++ non-blocking multi-threaded network
library for linux。
在其readme和wiki中均未提及此lib是否適用於實際場景,於是我花了些時間翻看了一
下,得出的結論是此lib僅限於展示epoll/poll的基本用法,對網路程式設計初學者是否有參考
價值還有待進一步考察。
任何乙個網路產品除了要支援網路event之外,還必須處理另外兩種事件:signal和
timer。
muduo也毫無例外。但近看一下就發現muduo對single和timer的支援很有喜感。
除了sigpipe被mask之外,muduo沒有接管signal。當然muduo這麼做是有藉口的,反
正有signalfd嘛。在此我想問問各位做網路應用的同學,在你的實際專案中,不用posix
的signal介面而用signalfd的,有幾個?而如果是從程式設計初學者教育的角度來看,是介紹
posix重要,還是介紹2.6.22引入的乙個new feature重要?
而拋棄signal的處理之後,muduo自然輕鬆了許多,還順帶可以說一句:muduo支援高
級特性signalfd。--嗯,聽起來很高階,不過signalfd不是muduo支援的,而是kernel支
持的。
乙個網路程式設計庫,timer是重中之重,比到底是用epoll還是select都重要。當然,話說回
來,再吊的庫無非也就是個heap為本的資料結構在支援,無非是有些庫喜歡說自己的
heap實現比別人都高效,比如haproxy。
但muduo卻獨闢蹊徑,用timerfd,泥瑪又是乙個高階特性啊,很唬人的。由kernel幫你
管理timer,是不是很吊。
不僅採用了timerfd,muduo還採用了set來儲存event,每個big loop裡要查超時的時
候,再iterate一遍這個set。
再然後,每次加乙個timer,就要冒著一次settime的syscall的風險--這還不夠,還得要一
次gettimeofday。別不把syscall當不要錢的可以嗎?
你也許可以跑10萬個連線,但你敢加上超時的特性嗎?muduo如果有做過細緻的
benchmark就會知道,乙個loop裡最花時間的就是timer的處理。
關於muduo的timer處理,槽點太多,我就不一一細述了。回頭看看timer,很顯然不適
合工業應用,而給初學者做參考。。。嗯,負面參考價值很大。
嗯,今天先說這麼多吧。吐槽點還很多,比如那個全功能的http範例,比如對
pthread/fork的支援,比如對記憶體的使用等等等等。都要一一吐過也不是不可以,不過就
要耐下性子來慢慢寫就是。
linux下多執行緒實現服務端
併發服務端有多執行緒的和多程序的,今天來看一下多執行緒的。執行緒程式設計可能會麻煩一點,其中涉及到一些同步,死鎖問題,但是也有其優點。併發服務端用的多的還是多程序。服務端 include include include include include include include include ...
Linux 多執行緒服務端程式設計讀書筆記(七)
1 unp 中五個簡單的示例 discard 丟棄所有收到的資料,簡單的長連線tcp應用層協議 void discardserver onmessage const tcpconnectionptr conn,buffer buf,timestamp time daytime 短連線協議,在傳送完當...
linux網路程式設計 廣播服務端
解釋都在 裡 廣播接收服務端 include include include include include include include include define dbgprint printf define print printf define ip found ip found ip發...