評 Linux多執行緒服務端程式設計

2021-06-19 11:32:17 字數 1453 閱讀 3444

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發...