關於《Linux多線程服務端編程:使用muduo C++網路程式庫》的內容梳理

來源:互聯網
上載者:User

這本書主要分享了作者在實現公司內部的分布式服務系統中積累的多線程和網路編程方面的經驗,並介紹了C++
在編寫這種分布式系統的服務端程式時的功能取捨與注意事項,書中的很多決策(design decision)是在這一應用情境下做出的。這本書沒有細談分布式系統的設計,只在第9章列舉了分布式系統的挑戰及其對程式設計(服務端編程)的影響,例如可靠性、可維護性等。

以下是各章直接的交叉參考關聯性圖(沒有計算引用次數),其中第0章是前言,字母章節是附錄。可見第9章“分布式系統工程實踐”是被引用最多的一章,全書很多內容都是為它做鋪墊。

這本書的書名原本打算叫“Linux C++
多線程系統編程”。寫作中發現,與其他Unix/Linux系統編程方面的書不同,這本書有明確的應用情境,因此可以砍掉很多內容,突出重點。“資訊”按照香農的定義,是“減少不確定性”,這本書包含的資訊正是減少選用編程設施(facilities)方面的不確定性,讓讀者集中精力攻克本質問題。這不是一本面面俱到的書,因此最終的書名也就不叫“系統編程”了。舉例來說:

·         這本書沒有花很大的篇幅去講signal,而是在第4.10節說明多線程程式不要使用signal作為IPC。並且,在muduo-protorpc的樣本中給出了Linux專有的signalfd的用法,可以避免傳統signal
handler的常見陷阱。第4.4節說明不要從外部終止線程,因此也就不必去細究Pthreads cancellation point了。

·         這本書沒介紹daemon進程,因為這種進程的父進程是init(1),不便於監控與管理(第9.8節)。為了管理方便,業務進程不應該fork()。多線程程式也最好不要fork()(第4.9節)。

·         這本書只關注Linux,不考慮移植性。它推薦使用Linux專有的gettid()系統調用作為線程標識(第4.3節),而不是用pthread_self();muduo使用timerfd來實現高精度定時,而且直接使用C++標準庫來管理定時器,而不是自己實現小頂堆(heap)。

·         這本書只講mutex和condition variable作為最基礎的線程同步手段(第2章),並且建議只使用非遞迴的mutex(第2.1.1節),這與某些網上文章的推薦正好相反。這本書第2.3節甚至建議不要使用讀寫鎖和訊號量(semaphore),因為一是容易用錯,二是不見得能提高效能。有了mutex和condition
variable,就能實現多種更易用的同步設施,例如CountDownLatch和BlockingQueue。

·         這本書只講BSD Sockets作為處理序間通訊的手段,並且只用TCP長串連(第3.4節)。這樣就砍掉了pipe、FIFO、POSIX
message queue、shared memory、STREAMS、UNIX domain socket等等內容,因為它們都只限本機處理序間通訊,無法擴充到多機。

·         網路編程方面(第6、7章),只講非阻塞IO結合IO複用這一種並發風格(歸納為三個半事件),並介紹在多線程下的擴充(one
loop per thread)。本書不講IPv6,因為目前世界上最大的公司的服務機群也用不完一個私人A類地址(10.0.0.0/8)。

·         這本書舉的網路編程的例子不再是簡單的echo服務,而是有格式(因此引入codec)、多串連之間會交換資料的網路程式,更接近業務情境,也藉機講解如何避免TCP網路編程的常見陷阱。並且在範例程式碼中給出了分布式單詞計數、多機求中位元等稍微複雜一點的程式。

·         在C++方面,這本書沒有介紹動態連結程式庫熱更新這種“進階”技術,而是說明,在分布式系統中,為了部署方便,應該從源碼編譯全部的庫,與主程式連結為一個standalone的可執行檔,以減小對運行環境的依賴(第10章)。第11章還討論了程式庫與應用程式之間的介面設計。

更多內容請參考配套網頁:chenshuo.com/book,包含樣章、勘誤表、URL列表等。

書摘

第6.6.2節

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.