注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)程序設(shè)計(jì)綜合Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫(多年編寫生產(chǎn)環(huán)境下多線程服務(wù)端程序經(jīng)驗(yàn)之精華)

Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫(多年編寫生產(chǎn)環(huán)境下多線程服務(wù)端程序經(jīng)驗(yàn)之精華)

Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫(多年編寫生產(chǎn)環(huán)境下多線程服務(wù)端程序經(jīng)驗(yàn)之精華)

定 價(jià):¥89.00

作 者: 陳碩
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: LINUX 操作系統(tǒng)/系統(tǒng)開發(fā) 計(jì)算機(jī)/網(wǎng)絡(luò)

ISBN: 9787121192821 出版時(shí)間: 2013-01-01 包裝: 平裝
開本: 16開 頁數(shù): 616 字?jǐn)?shù):  

內(nèi)容簡介

  《Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫》主要講述采用現(xiàn)代C++在x86-64 Linux上編寫多線程TCP網(wǎng)絡(luò)服務(wù)程序的主流常規(guī)技術(shù),重點(diǎn)講解一種適應(yīng)性較強(qiáng)的多線程服務(wù)器的編程模型,即one loop per thread。這是在Linux下以native語言編寫用戶態(tài)高性能網(wǎng)絡(luò)程序最成熟的模式,掌握之后可順利地開發(fā)各類常見的服務(wù)端網(wǎng)絡(luò)應(yīng)用程序。本書以muduo網(wǎng)絡(luò)庫為例,講解這種編程模型的使用方法及注意事項(xiàng)?!禠inux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫》的宗旨是貴精不貴多。掌握兩種基本的同步原語就可以滿足各種多線程同步的功能需求,還能寫出更易用的同步設(shè)施。掌握一種進(jìn)程間通信方式和一種多線程網(wǎng)絡(luò)編程模型就足以應(yīng)對日常開發(fā)任務(wù),編寫運(yùn)行于公司內(nèi)網(wǎng)環(huán)境的分布式服務(wù)系統(tǒng)。

作者簡介

  陳碩,北京師范大學(xué)碩士,擅長C++ 多線程網(wǎng)絡(luò)編程和實(shí)時(shí)分布式系統(tǒng)架構(gòu)。曾在摩根士丹利IT 部門工作5 年,從事實(shí)時(shí)外匯交易系統(tǒng)開發(fā)?,F(xiàn)在在美國加州硅谷某互聯(lián)網(wǎng)大公司工作,從事大規(guī)模分布式系統(tǒng)的可靠性工程。編寫了開源C++ 網(wǎng)絡(luò)庫muduo,參與翻譯了《代碼大全(第2 版)》和《C++ 編程規(guī)范(繁體版)》,整理了《C++ Primer (第4 版)(評注版)》,并曾多次在各地技術(shù)大會演講。

圖書目錄

第1 部分 C++ 多線程系統(tǒng)編程
第1 章 線程安全的對象生命期管理
1.1 當(dāng)析構(gòu)函數(shù)遇到多線程
1.1.1 線程安全的定義
1.1.2 MutexLock 與MutexLockGuard
1.1.3 一個(gè)線程安全的Counter 示例
1.2 對象的創(chuàng)建很簡單.
1.3 銷毀太難
1.3.1 mutex 不是辦法
1.3.2 作為數(shù)據(jù)成員的mutex 不能保護(hù)析構(gòu).
1.4 線程安全的Observer 有多難.
1.5 原始指針有何不妥.
1.6 神器shared_ptr/weak_ptr
1.7 插曲:系統(tǒng)地避免各種指針錯(cuò)誤.
1.8 應(yīng)用到Observer 上
1.9 再論shared_ptr 的線程安全.
1.10 shared_ptr 技術(shù)與陷阱
1.11 對象池.
1.11.1 enable_shared_from_this
1.11.2 弱回調(diào).
1.12 替代方案
1.13 心得與小結(jié).
1.14 Observer 之謬.
第2 章 線程同步精要
2.1 互斥器(mutex) .
2.1.1 只使用非遞歸的mutex
2.1.2 死鎖
2.2 條件變量(condition variable) .
2.3 不要用讀寫鎖和信號量
2.4 封裝MutexLock、MutexLockGuard、Condition
2.5 線程安全的Singleton 實(shí)現(xiàn)
2.6 sleep(3) 不是同步原語
2.7 歸納與總結(jié).
2.8 借shared_ptr 實(shí)現(xiàn)copy-on-write
第3 章 多線程服務(wù)器的適用場合與常用編程模型
3.1 進(jìn)程與線程.
3.2 單線程服務(wù)器的常用編程模型
3.3 多線程服務(wù)器的常用編程模型
3.3.1 one loop per thread
3.3.2 線程池.
3.3.3 推薦模式
3.4 進(jìn)程間通信只用TCP .
3.5 多線程服務(wù)器的適用場合.
3.5.1 必須用單線程的場合.
3.5.2 單線程程序的優(yōu)缺點(diǎn).
3.5.3 適用多線程程序的場景
3.6 “多線程服務(wù)器的適用場合”例釋與答疑
第4 章 C++ 多線程系統(tǒng)編程精要
4.1 基本線程原語的選用.
4.2 C/C++ 系統(tǒng)庫的線程安全性.
4.3 Linux 上的線程標(biāo)識
4.4 線程的創(chuàng)建與銷毀的守則.
4.4.1 pthread_cancel 與C++ .
4.4.2 exit(3) 在C++ 中不是線程安全的.
4.5 善用__thread 關(guān)鍵字.
4.6 多線程與IO
4.7 用RAII 包裝文件描述符.
4.8 RAII 與fork() .
4.9 多線程與fork() .
4.10 多線程與signal
4.11 Linux 新增系統(tǒng)調(diào)用的啟示
第5 章 高效的多線程日志
5.1 功能需求
5.2 性能需求
5.3 多線程異步日志
5.4 其他方案
第2 部分 muduo 網(wǎng)絡(luò)庫
第6 章 muduo 網(wǎng)絡(luò)庫簡介
6.1 由來.
6.2 安裝.
6.3 目錄結(jié)構(gòu)
6.3.1 代碼結(jié)構(gòu)
6.3.2 例子
6.3.3 線程模型
6.4 使用教程
6.4.1 TCP 網(wǎng)絡(luò)編程本質(zhì)論.
6.4.2 echo 服務(wù)的實(shí)現(xiàn).
6.4.3 七步實(shí)現(xiàn)finger 服務(wù).
6.5 性能評測
6.5.1 muduo 與Boost.Asio、libevent2 的吞吐量對比
6.5.2 擊鼓傳花:對比muduo 與libevent2 的事件處理效率
6.5.3 muduo 與Nginx 的吞吐量對比.
6.5.4 muduo 與ZeroMQ 的延遲對比.
6.6 詳解muduo 多線程模型.
6.6.1 數(shù)獨(dú)求解服務(wù)器
6.6.2 常見的并發(fā)網(wǎng)絡(luò)服務(wù)程序設(shè)計(jì)方案.
第7 章 muduo 編程示例
7.1 五個(gè)簡單TCP 示例
7.2 文件傳輸
7.3 Boost.Asio 的聊天服務(wù)器.
7.3.1 TCP 分包
7.3.2 消息格式
7.3.3 編解碼器LengthHeaderCodec
7.3.4 服務(wù)端的實(shí)現(xiàn).
7.3.5 客戶端的實(shí)現(xiàn).
7.4 muduo Buffer 類的設(shè)計(jì)與使用.
7.4.1 muduo 的IO 模型
7.4.2 為什么non-blocking 網(wǎng)絡(luò)編程中應(yīng)用層buffer 是必需的
7.4.3 Buffer 的功能需求
7.4.4 Buffer 的數(shù)據(jù)結(jié)構(gòu)
7.4.5 Buffer 的操作.
7.4.6 其他設(shè)計(jì)方案.
7.4.7 性能是不是問題
7.5 一種自動反射消息類型的Google Protobuf 網(wǎng)絡(luò)傳輸方案
7.5.1 網(wǎng)絡(luò)編程中使用Protobuf 的兩個(gè)先決條件.
7.5.2 根據(jù)type name 反射自動創(chuàng)建Message 對象
7.5.3 Protobuf 傳輸格式
7.6 在muduo 中實(shí)現(xiàn)Protobuf 編解碼器與消息分發(fā)器
7.6.1 什么是編解碼器(codec)
7.6.2 實(shí)現(xiàn)ProtobufCodec .
7.6.3 消息分發(fā)器(dispatcher)有什么用
7.6.4 ProtobufCodec 與ProtobufDispatcher 的綜合運(yùn)用.
7.6.5 ProtobufDispatcher 的兩種實(shí)現(xiàn)
7.6.6 ProtobufCodec 和ProtobufDispatcher 有何意義.
7.7 限制服務(wù)器的最大并發(fā)連接數(shù)
7.7.1 為什么要限制并發(fā)連接數(shù)
7.7.2 在muduo 中限制并發(fā)連接數(shù)
7.8 定時(shí)器.
7.8.1 程序中的時(shí)間.
7.8.2 Linux 時(shí)間函數(shù)
7.8.3 muduo 的定時(shí)器接口.
7.8.4 Boost.Asio Timer 示例
7.8.5 Java Netty 示例
7.9 測量兩臺機(jī)器的網(wǎng)絡(luò)延遲和時(shí)間差.
7.10 用timing wheel 踢掉空閑連接
7.10.1 timing wheel 原理
7.10.2 代碼實(shí)現(xiàn)與改進(jìn)
7.11 簡單的消息廣播服務(wù).
7.12 “串并轉(zhuǎn)換”連接服務(wù)器及其自動化測試
7.13 socks4a 代理服務(wù)器
7.13.1 TCP 中繼器
7.13.2 socks4a 代理服務(wù)器
7.13.3 N : 1 與1 : N 連接轉(zhuǎn)發(fā)
7.14 短址服務(wù)
7.15 與其他庫集成.
7.15.1 UDNS .
7.15.2 c-ares DNS .
7.15.3 curl .
7.15.4 更多
第8 章 muduo 網(wǎng)絡(luò)庫設(shè)計(jì)與實(shí)現(xiàn)
8.0 什么都不做的EventLoop .
8.1 Reactor 的關(guān)鍵結(jié)構(gòu)
8.1.1 Channel class .
8.1.2 Poller class
8.1.3 EventLoop 的改動.
8.2 TimerQueue 定時(shí)器
8.2.1 TimerQueue class .
8.2.2 EventLoop 的改動.
8.3 EventLoop::runInLoop() 函數(shù)
8.3.1 提高TimerQueue 的線程安全性.
8.3.2 EventLoopThread class
8.4 實(shí)現(xiàn)TCP 網(wǎng)絡(luò)庫
8.5 TcpServer 接受新連接
8.5.1 TcpServer class
8.5.2 TcpConnection class .
8.6 TcpConnection 斷開連接.
8.7 Buffer 讀取數(shù)據(jù)
8.7.1 TcpConnection 使用Buffer 作為輸入緩沖.
8.7.2 Buffer::readFd()
8.8 TcpConnection 發(fā)送數(shù)據(jù).
8.9 完善TcpConnection
8.9.1 SIGPIPE
8.9.2 TCP No Delay 和TCP keepalive
8.9.3 WriteCompleteCallback 和HighWaterMarkCallback .
8.10 多線程TcpServer .
8.11 Connector .
8.12 TcpClient .
8.13 epoll
8.14 測試程序一覽.
第3 部分 工程實(shí)踐經(jīng)驗(yàn)談
第9 章 分布式系統(tǒng)工程實(shí)踐
9.1 我們在技術(shù)浪潮中的位置.
9.1.1 分布式系統(tǒng)的本質(zhì)困難
9.1.2 分布式系統(tǒng)是個(gè)險(xiǎn)惡的問題.
9.2 分布式系統(tǒng)的可靠性淺說.
9.2.1 分布式系統(tǒng)的軟件不要求7  24 可靠
9.2.2 “能隨時(shí)重啟進(jìn)程”作為程序設(shè)計(jì)目標(biāo).
9.3 分布式系統(tǒng)中心跳協(xié)議的設(shè)計(jì)
9.4 分布式系統(tǒng)中的進(jìn)程標(biāo)識.
9.4.1 錯(cuò)誤做法
9.4.2 正確做法
9.4.3 TCP 協(xié)議的啟示
9.5 構(gòu)建易于維護(hù)的分布式程序.
9.6 為系統(tǒng)演化做準(zhǔn)備.
9.6.1 可擴(kuò)展的消息格式
9.6.2 反面教材:ICE 的消息打包格式.
9.7 分布式程序的自動化回歸測試
9.7.1 單元測試的能與不能.
9.7.2 分布式系統(tǒng)測試的要點(diǎn)
9.7.3 分布式系統(tǒng)的抽象觀點(diǎn)
9.7.4 一種自動化的回歸測試方案.
9.7.5 其他用處
9.8 分布式系統(tǒng)部署、監(jiān)控與進(jìn)程管理的幾重境界.
9.8.1 境界1:全手工操作.
9.8.2 境界2:使用零散的自動化腳本和第三方組件.
9.8.3 境界3:自制機(jī)群管理系統(tǒng),集中化配置.
9.8.4 境界4:機(jī)群管理與naming service 結(jié)合.
第10 章 C++ 編譯鏈接模型精要
10.1 C 語言的編譯模型及其成因.
10.1.1 為什么C 語言需要預(yù)處理
10.1.2 C 語言的編譯模型.
10.2 C++ 的編譯模型
10.2.1 單遍編譯
10.2.2 前向聲明
10.3 C++ 鏈接(linking) .
10.3.1 函數(shù)重載
10.3.2 inline 函數(shù).
10.3.3 模板
10.3.4 虛函數(shù).
10.4 工程項(xiàng)目中頭文件的使用規(guī)則
10.4.1 頭文件的害處.
10.4.2 頭文件的使用規(guī)則
10.5 工程項(xiàng)目中庫文件的組織原則
10.5.1 動態(tài)庫是有害的
10.5.2 靜態(tài)庫也好不到哪兒去
10.5.3 源碼編譯是王道
第11 章 反思C++ 面向?qū)ο笈c虛函數(shù)
11.1 樸實(shí)的C++ 設(shè)計(jì)
11.2 程序庫的二進(jìn)制兼容性
11.2.1 什么是二進(jìn)制兼容性.
11.2.2 有哪些情況會破壞庫的ABI .
11.2.3 哪些做法多半是安全的
11.2.4 反面教材:COM .
11.2.5 解決辦法
11.3 避免使用虛函數(shù)作為庫的接口
11.3.1 C++ 程序庫的作者的生存環(huán)境
11.3.2 虛函數(shù)作為庫的接口的兩大用途
11.3.3 虛函數(shù)作為接口的弊端
11.3.4 假如Linux 系統(tǒng)調(diào)用以COM 接口方式實(shí)現(xiàn)
11.3.5 Java 是如何應(yīng)對的
11.4 動態(tài)庫接口的推薦做法
11.5 以boost::function 和boost::bind 取代虛函數(shù).
11.5.1 基本用途
11.5.2 對程序庫的影響
11.5.3 對面向?qū)ο蟪绦蛟O(shè)計(jì)的影響.
11.6 iostream 的用途與局限
11.6.1 stdio 格式化輸入輸出的缺點(diǎn).
11.6.2 iostream 的設(shè)計(jì)初衷.
11.6.3 iostream 與標(biāo)準(zhǔn)庫其他組件的交互.
11.6.4 iostream 在使用方面的缺點(diǎn).
11.6.5 iostream 在設(shè)計(jì)方面的缺點(diǎn).
11.6.6 一個(gè)300 行的memory buffer output stream .
11.6.7 現(xiàn)實(shí)的C++ 程序如何做文件IO .
11.7 值語義與數(shù)據(jù)抽象.
11.7.1 什么是值語義.
11.7.2 值語義與生命期
11.7.3 值語義與標(biāo)準(zhǔn)庫
11.7.4 值語義與C++ 語言
11.7.5 什么是數(shù)據(jù)抽象
11.7.6 數(shù)據(jù)抽象所需的語言設(shè)施
11.7.7 數(shù)據(jù)抽象的例子
第12 章 C++ 經(jīng)驗(yàn)談
12.1 用異或來交換變量是錯(cuò)誤的.
12.1.1 編譯器會分別生成什么代碼.
12.1.2 為什么短的代碼不一定快
12.2 不要重載全局::operator new()
12.2.1 內(nèi)存管理的基本要求.
12.2.2 重載::operator new() 的理由.
12.2.3 ::operator new() 的兩種重載方式.
12.2.4 現(xiàn)實(shí)的開發(fā)環(huán)境
12.2.5 重載::operator new() 的困境.
12.2.6 解決辦法:替換malloc()
12.2.7 為單獨(dú)的class 重載::operator new() 有問題嗎.
12.2.8 有必要自行定制內(nèi)存分配器嗎
12.3 帶符號整數(shù)的除法與余數(shù).
12.3.1 語言標(biāo)準(zhǔn)怎么說
12.3.2 C/C++ 編譯器的表現(xiàn).
12.3.3 其他語言的規(guī)定
12.3.4 腳本語言解釋器代碼.
12.3.5 硬件實(shí)現(xiàn)
12.4 在單元測試中mock 系統(tǒng)調(diào)用
12.4.1 系統(tǒng)函數(shù)的依賴注入.
12.4.2 鏈接期墊片(link seam)
12.5 慎用匿名namespace .
12.5.1 C 語言的static 關(guān)鍵字的兩種用法.
12.5.2 C++ 語言的static 關(guān)鍵字的四種用法
12.5.3 匿名namespace 的不利之處.
12.5.4 替代辦法
12.6 采用有利于版本管理的代碼格式.
12.6.1 對diff 友好的代碼格式
12.6.2 對grep 友好的代碼風(fēng)格.
12.6.3 一切為了效率.
12.7 再探std::string .
12.7.1 直接拷貝(eager copy) .
12.7.2 寫時(shí)復(fù)制(copy-on-write) .
12.7.3 短字符串優(yōu)化(SSO)
12.8 用STL algorithm 輕松解決幾道算法面試題
12.8.1 用next_permutation() 生成排列與組合
12.8.2 用unique() 去除連續(xù)重復(fù)空白.
12.8.3 用{make,push,pop}_heap() 實(shí)現(xiàn)多路歸并
12.8.4 用partition() 實(shí)現(xiàn)“重排數(shù)組,讓奇數(shù)位于偶數(shù)前面”
12.8.5 用lower_bound() 查找IP 地址所屬的城市.
第4 部分 附錄
附錄A 談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)
附錄B 從《C++ Primer(第4 版)》入手學(xué)習(xí)C++
附錄C 關(guān)于Boost 的看法
附錄D 關(guān)于TCP 并發(fā)連接的幾個(gè)思考題與試驗(yàn)

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號