內容簡介
本書主要講述采用現代 C++ 在 x86-64 Linux 上編寫多線程 TCP 網絡服務程序的主流常規技術,重點講解一種適應性較強的多線程服務器的編程模型,即 one loop per thread。這是在 Linux 下以 native 語言編寫用戶態高性能網絡程序最成熟的模式,掌握之后可順利地開發各類常見的服務端網絡應用程序。本書以 muduo 網絡庫為例,講解這種編程模型的使用方法及注意事項。
本書的宗旨是貴精不貴多。掌握兩種基本的同步原語就可以滿足各種多線程同步的功能需求,還能寫出更易用的同步設施。掌握一種進程間通信方式和一種多線程網絡編程模型就足以應對日常開發任務,編寫運行于公司內網環境的分布式服務統。
基本信息
出版社:電子工業出版社
頁數:xvi+600
定價:人民幣89元
ISBN:9787121192821
豆瓣及網上書店預訂
豆瓣:http://book.douban.com/subject/20471211/
互動:http://product.china-pub.com/3021861
亞馬遜:http://www.amazon.cn/dp/B00AYS2KL0
當當:http://product.dangdang.com/product.aspx?product_id=23162953
京東:http://book.360buy.com/11163782.html
試讀樣章
前言與目錄:https://chenshuo-public.s3.amazonaws.com/pdf/preamble.pdf
第1章:線程安全的對象生命期管理:https://chenshuo-public.s3.amazonaws.com/pdf/chap1.pdf
第6章:muduo網絡庫簡介:https://chenshuo-public.s3.amazonaws.com/pdf/chap6.pdf
附錄:https://chenshuo-public.s3.amazonaws.com/pdf/appendix.pdf
樣章合集下載:http://vdisk.weibo.com/s/mtupb 共150頁,包括第 11.5 節。
前言(節選)
本書主要講述采用現代 C++ 在 x86-64 Linux 上編寫多線程 TCP 網絡服務程序的主流常規技術,這也是我對過去 5 年編寫生產環境下的多線程服務端程序的經驗總結。本書重點講解多線程網絡服務器的一種 IO 模型,即 one loop per thread。這是一種適應性較強的模型,也是 Linux 下以 native 語言編寫用戶態高性能網絡程序最成熟的模式, 掌握之后可順利地開發各類常見的服務端網絡應用程序。本書以 muduo 網絡庫為例,講解這種編程模型的使用方法及注意事項。
muduo 是一個基于非阻塞 IO 和事件驅動的現代 C++ 網絡庫,原生支持 one loop per thread 這種 IO 模型。muduo 適合開發 Linux 下的面向業務的多線程服務端網絡應用程序,其中“面向業務的網絡編程”的定義見附錄 A。 “現代 C++”指的不是 C++11 新標準,而是 2005 年 TR1 發布之后的 C++ 語言和庫。 與傳統 C++ 相比,現代 C++ 的變化主要有兩方面:資源管理(見第 1 章)與事件回調(見第 449 頁)。
本書不是多線程編程教程,也不是網絡編程教程,更不是 C++ 教程。讀者應該已經大致讀過《UNIX 環境高級編程》、《UNIX 網絡編程》、《C++ Primer》或與之內容相近的書籍。本書不談 C++11,因為目前(2012 年)主流的 Linux 服務端發行版的 g++ 版本都還停留在 4.4,C++11 進入實用尚需一段時日。
本書適用的硬件環境是主流 x86-64 服務器,多路多核 CPU、幾十 GB 內存、千兆以太網互聯。除了第 5 章講診斷日志之外,本書不涉及文件 IO。
本書分為四大部分,第 1 部分“C++ 多線程系統編程”考察多線程下的對象生命期管理、線程同步方法、多線程與 C++ 的結合、高效的多線程日志等。第 2 部分“muduo 網絡庫”介紹使用現成的非阻塞網絡庫編寫網絡應用程序的方法,以及 muduo 的設計與實現。第 3 部分“工程實踐經驗談”介紹分布式系統的工程化開發方法和 C++ 在工程實踐中的功能特性取舍。第 4 部分“附錄”分享網絡編程和 C++ 語言的學習經驗。
本書的宗旨是貴精不貴多。掌握兩種基本的同步原語就可以滿足各種多線程同步的功能需求,還能寫出更易用的同步設施。掌握一種進程間通信方式和一種多線程網絡編程模型就足以應對日常開發任務,編寫運行于公司內網環境的分布式服務系統。(本書不涉及分布式存儲系統,也不涉及 UDP。)
術語與排版范例
本書大量使用英文術語,甚至有少量英文引文。設計模式的名字一律用英文,例如 Observer、Reactor、Singleton。在中文術語不夠突出時,也會使用英文,例如 class、heap、event loop、STL algorithm 等。注意幾個中文 C++ 術語:對象實體(instance) 、函數重載決議(resolution) 、模板具現化(instantiation) 、覆寫(override)虛函數、提領(dereference)指針。本書中的英語可數名詞一般不用復數形式,例如兩個 class,6 個 syscall;但有時會用 (s) 強調中文名詞是復數。fd 是文件描述符(file descriptor)的縮寫。“CPU 數目”一般指的是核(core)的數目。用諸如§11.5 表示本書第 11.5 節,L42 表示上下文中出現的第 42 行代碼。[JCP]、[CC2e] 等是參考文獻,見書末清單。
代碼
本書的示例代碼以開源項目的形式發布在 GitHub 上,
地址是 http://github.com/chenshuo/recipes/ 和 http://github.com/chenshuo/muduo/ 。本書配套頁面提供全部源代碼打包下載,正文中出現的類似 recipes/thread 的路徑是壓縮包內的相對路徑,讀者不難找到其對應的 GitHub URL。
本書假定讀者熟悉 diff -u 命令的輸出格式,用于表示代碼的改動。
本書正文中出現的代碼有時為了照顧排版而略有改寫,例如改變縮進規則,去掉單行條件語句前后的花括號等。就編程風格而論,應以電子版代碼為準。
聯系方式
郵箱:giantchen_at_gmail.com
主頁:http://chenshuo.com/book (正文和腳注中出現的 URL 可從這里找到。 )
微博:http://weibo.com/giantchen
博客:http://blog.csdn.net/Solstice
代碼:http://github.com/chenshuo
陳碩
中國•香港