Linux 新服務(wù)器高效運(yùn)維部署筆記詳解 完整版PDF
7.03MB / 03-03
精通Kali Linux高級滲透測試 2023版 完整pdf原版
47.3MB / 10-18
Kali Linux Revealed完美版(掌握滲透測試) 官方教程 pdf完整版
25.0MB / 08-28
嵌入式Linux應(yīng)用開發(fā)完全手冊 完整版PDF
30.8MB / 07-09
Kali Linux系統(tǒng)使用基礎(chǔ)教程(大學(xué)霸) V2.0 中文PDF完整版
65MB / 06-27
kali linux常用命令手冊 + 系統(tǒng)常用命令手冊 PDF版
42.9KB / 06-25
韓順平2021圖解Linux升級 + 一周內(nèi)學(xué)會linux 完整版PDF
32.0MB / 05-15
跟老男孩學(xué)linux三劍客命令(awk sed grep全攻略) v1.5 中文PDF版
933KB / 03-11
Linux應(yīng)急手冊 中文PDF完整版
158MB / 02-27
Linux系統(tǒng)編程學(xué)習(xí)筆記 完整版PDF
11.7MB / 02-22
-
-
-
Kali Linux Revealed完美版(掌握滲透測試) 官方教程 pdf完整版 Linux_unix / 25.0MB
-
-
Kali Linux系統(tǒng)使用基礎(chǔ)教程(大學(xué)霸) V2.0 中文PDF完整版 Linux_unix / 65MB
-
-
韓順平2021圖解Linux升級 + 一周內(nèi)學(xué)會linux 完整版PDF Linux_unix / 32.0MB
-
跟老男孩學(xué)linux三劍客命令(awk sed grep全攻略) v1.5 中文PDF版 Linux_unix / 933KB
-
Linux應(yīng)急手冊 中文PDF完整版 Linux_unix / 158MB
-
詳情介紹
《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。
目 錄
第1部分C++ 多線程系統(tǒng)編程
第1章線程安全的對象生命期管理3
1.1當(dāng)析構(gòu)函數(shù)遇到多線程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3
1.1.1線程安全的定義. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4
1.1.2MutexLock 與MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4
1.1.3一個(gè)線程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4
1.2對象的創(chuàng)建很簡單. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5
1.3銷毀太難. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7
1.3.1mutex 不是辦法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7
1.3.2作為數(shù)據(jù)成員的mutex 不能保護(hù)析構(gòu).. . . . . . . . . . . . . . 8
1.4線程安全的Observer 有多難.. . . . . . . . . . . . . . . . . . . . . . . . 8
1.5原始指針有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11
1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13
1.7插曲:系統(tǒng)地避免各種指針錯(cuò)誤. . . . . . . . . . . . . . . . .. . . . . . 14
1.8應(yīng)用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9再論shared_ptr 的線程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17
1.10shared_ptr 技術(shù)與陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19
1.11對象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21
1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23
1.11.2弱回調(diào). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24
1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26
1.13心得與小結(jié). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26
1.14Observer 之謬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
第2章線程同步精要
2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.1.1只使用非遞歸的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33
2.1.2死鎖. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35
2.2條件變量(condition variable). . . . . . . . . . . . . . . . . . . . . . . 40
2.3不要用讀寫鎖和信號量. . . . . . . . . . . . . . . . .. . . . . . . . . . . 43
2.4封裝MutexLock、MutexLockGuard、Condition. . . . . . . . . . . . . . 44
2.5線程安全的Singleton 實(shí)現(xiàn).. . . . . . . . . . . . . . . . . . . . . . . . . 48
2.6sleep(3) 不是同步原語. . . .. . . . . . . . . . . . . . . . . . . . . . . . 50
2.7歸納與總結(jié). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 51
2.8借shared_ptr 實(shí)現(xiàn)copy-on-write. . . . . . . . . . . . . . . . . . . . . . 52
第3章多線程服務(wù)器的適用場合與常用編程模型
3.1進(jìn)程與線程. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 59
3.2單線程服務(wù)器的常用編程模型. . . . . . . . . . . . . . . . .. . . . . . . 61
3.3多線程服務(wù)器的常用編程模型. . . . . . . . . . . . . . . . .. . . . . . . 62
3.3.1one loop per thread . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.3.2線程池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 63
3.3.3推薦模式. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 64
3.4進(jìn)程間通信只用TCP . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 65
3.5多線程服務(wù)器的適用場合. . . . . . . . . . . . . . . . .. . . . . . . . . . 67
3.5.1必須用單線程的場合. . . . . . . . . . . . . . . . .. . . . . . . . 69
3.5.2單線程程序的優(yōu)缺點(diǎn). . . . . . . . . . . . . . . . .. . . . . . . . 70
3.5.3適用多線程程序的場景. . . . . . . . . . . . . . . . .. . . . . . . 71
3.6“多線程服務(wù)器的適用場合”例釋與答疑.. . . . . . . . . . . . . . . . . 74
第4章C++ 多線程系統(tǒng)編程精要83
4.1基本線程原語的選用. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 84
4.2C/C++ 系統(tǒng)庫的線程安全性. . . . . . . . . . . . . . . . .. . . . . . . . 85
4.3Linux 上的線程標(biāo)識. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 89
4.4線程的創(chuàng)建與銷毀的守則. . . . . . . . . . . . . . . . .. . . . . . . . . . 91
6pxhread_cancel 與C++ . .. . . . . . . . . . . . . . . . . . . . . 94
4.4.2exit(3) 在C++ 中不是線程安全的.. . . . . . . . . . . . . . . . 94
4.5善用__thread 關(guān)鍵字.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.6多線程與IO . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 98
4.7用RAII 包裝文件描述符.. . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.8RAII 與fork() . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 101
4.9多線程與fork() . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 102
4.10多線程與signal . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 103
4.11Linux 新增系統(tǒng)調(diào)用的啟示. . . . . . . . . . . . . . . . .. . . . . . . . . 105
第5章高效的多線程日志107
5.1功能需求. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 109
5.2性能需求. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 112
5.3多線程異步日志. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 114
5.4其他方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 120
第2部分muduo 網(wǎng)絡(luò)庫
第6章muduo 網(wǎng)絡(luò)庫簡介125
6.1由來. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 125
6.2安裝. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 127
6.3目錄結(jié)構(gòu). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 129
6.3.1代碼結(jié)構(gòu). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 131
6.3.2例子. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 134
6.3.3線程模型. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 135
6.4使用教程. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 136
6.4.1TCP 網(wǎng)絡(luò)編程本質(zhì)論. . . . . . . . . . . . . . . . .. . . . . . . . 136
6.4.2echo 服務(wù)的實(shí)現(xiàn). . . . . . . . . . . . . . . . . . . .. . . . . . . 138
6.4.3七步實(shí)現(xiàn)finger 服務(wù).. . . . . . . . . . . . . . . . . . . . . . . . 140
6.5性能評測. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 144
6.5.1muduo 與Boost.Asio、libevent2的吞吐量對比. . . . . . . . . . 145
6.5.2擊鼓傳花:對比muduo 與libevent2的事件處理效率. . . . . . 148
6.5.3muduo 與Nginx 的吞吐量對比.. . . . . . . . . . . . . . . . . . 153
6.5.4muduo 與ZeroMQ 的延遲對比.. . . . . . . . . . . . . . . . . . 156
6.6詳解muduo 多線程模型.. . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.6.1數(shù)獨(dú)求解服務(wù)器. . . . . . . . . . . . . . . . .. . . . . . . . . . . 157
6.6.2常見的并發(fā)網(wǎng)絡(luò)服務(wù)程序設(shè)計(jì)方案. . . . . . . . . . . . . . . . .160
第7章muduo 編程示例177
7.1五個(gè)簡單TCP 示例.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
7.2文件傳輸. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 185
7.3Boost.Asio 的聊天服務(wù)器. . . .. . . . . . . . . . . . . . . . . . . . . . . 194
7.3.1TCP 分包. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 194
7.3.2消息格式. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 195
7.3.3編解碼器LengthHeaderCodec . . . . . . . . . . .. . . . . . . . . 197
7.3.4服務(wù)端的實(shí)現(xiàn). . . . . . . . . . . . . . . . .. . . . . . . . . . . . 198
7.3.5客戶端的實(shí)現(xiàn). . . . . . . . . . . . . . . . .. . . . . . . . . . . . 200
7.4muduo Buffer 類的設(shè)計(jì)與使用. . . .. . . . . . . . . . . . . . . . . . . 204
7.4.1muduo 的IO 模型.. . . . . . . . . . . . . . . . . . . . . . . . . 204
7.4.2為什么non-blocking 網(wǎng)絡(luò)編程中應(yīng)用層buffer是必需的. . . . 205
7.4.3Buffer 的功能需求. . . . . . . . . . . . . . . . . . . .. . . . . . 207
7.4.4Buffer 的數(shù)據(jù)結(jié)構(gòu). . . . . . . . . . . . . . . . . . . .. . . . . . 209
7.4.5Buffer 的操作. . . . . . . . . . . . . . . . . . . .. . . . . . . . . 211
7.4.6其他設(shè)計(jì)方案. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 217
7.4.7性能是不是問題. . . . . . . . . . . . . . . . .. . . . . . . . . . . 218
7.5一種自動反射消息類型的Google Protobuf 網(wǎng)絡(luò)傳輸方案.. . . . . . . 220
7.5.1網(wǎng)絡(luò)編程中使用Protobuf 的兩個(gè)先決條件.. . . . . . . . . . . . 220
7.5.2根據(jù)type name 反射自動創(chuàng)建Message對象. . . . . . . . . . . . 221
7.5.3Protobuf 傳輸格式. . . .. . . . . . . . . . . . . . . . . . . . . . 226
7.6在muduo 中實(shí)現(xiàn)Protobuf編解碼器與消息分發(fā)器. . . . . . . . . . . . 228
7.6.1什么是編解碼器(codec). . . . . . . . . . . . . . . . . . . . . . 229
7.6.2實(shí)現(xiàn)ProtobufCodec . . . . . . . . . . . . .. . . . . . . . . . . . 232
7.6.3消息分發(fā)器(dispatcher)有什么用.. . . . . . . . . . . . . . . 232
7.6.4ProtobufCodec 與ProtobufDispatcher的綜合運(yùn)用. . . . . . . 233
7.6.5ProtobufDispatcher 的兩種實(shí)現(xiàn). . . .. . . . . . . . . . . . . . 234
7.6.6ProtobufCodec 和ProtobufDispatcher有何意義. . . . . . . . . 236
7.7限制服務(wù)器的最大并發(fā)連接數(shù). . . . . . . . . . . . . . . . .. . . . . . . 237
7.7.1為什么要限制并發(fā)連接數(shù). . . . . . . . . . . . . . . . .. . . . . 237
7.7.2在muduo 中限制并發(fā)連接數(shù).. . . . . . . . . . . . . . . . . . . 238
7.8定時(shí)器. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 240
7.8.1程序中的時(shí)間. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 240
7.8.2Linux 時(shí)間函數(shù). . . . . . . . . . . . . . . . . . . .. . . . . . . . 241
7.8.3muduo 的定時(shí)器接口. . . . . . . . . . . . . . . . .. . . . . . . . 242
7.8.4Boost.Asio Timer 示例. . . .. . . . . . . . . . . . . . . . . . . . 243
7.8.5Java Netty 示例. . . .. . . . . . . . . . . . . . . . . . . . . . . . 245
7.9測量兩臺機(jī)器的網(wǎng)絡(luò)延遲和時(shí)間差. . . . . . . . . . . . . . . . .. . . . 248
7.10用timing wheel 踢掉空閑連接.. . . . . . . . . . . . . . . . . . . . . . . 250
7.10.1timing wheel 原理. . . .. . . . . . . . . . . . . . . . . . . . . . 251
7.10.2代碼實(shí)現(xiàn)與改進(jìn). . . . . . . . . . . . . . . . .. . . . . . . . . . . 254
7.11簡單的消息廣播服務(wù). . . . . . . . . . . . . . . . .. . . . . . . . . . . . 257
7.12“串并轉(zhuǎn)換”連接服務(wù)器及其自動化測試.. . . . . . . . . . . . . . . . . 260
7.13socks4a 代理服務(wù)器. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 264
7.13.1TCP 中繼器. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 264
7.13.2socks4a 代理服務(wù)器. . . .. . . . . . . . . . . . . . . . . . . . . . 267
7.13.3N : 1 與1 : N 連接轉(zhuǎn)發(fā).. . . . . . . . . . . . . . . . . . . . . . . 267
7.14短址服務(wù). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 267
7.15與其他庫集成. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 268
7.15.1UDNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
7.15.2c-ares DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
7.15.3curl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
7.15.4更多. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 275
第8章muduo 網(wǎng)絡(luò)庫設(shè)計(jì)與實(shí)現(xiàn)277
8.0什么都不做的EventLoop . . . . . . . . . . . .. . . . . . . . . . . . . . . 277
8.1Reactor 的關(guān)鍵結(jié)構(gòu). . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 280
8.1.1Channel class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
8.1.2Poller class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
8.1.3EventLoop 的改動. . . .. . . . . . . . . . . . . . . . . . . . . . . 287
8.2TimerQueue 定時(shí)器. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 290
8.2.1TimerQueue class . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
8.2.2EventLoop 的改動. . . .. . . . . . . . . . . . . . . . . . . . . . . 292
8.3EventLoop::runInLoop() 函數(shù).. . . . . . . . . . . . . . . . . . . . . . . 293
8.3.1提高TimerQueue 的線程安全性.. . . . . . . . . . . . . . . . . . 296
8.3.2EventLoopThread class . . . . . . . . . . . . . . . . . . . . . . . . 297
8.4實(shí)現(xiàn)TCP 網(wǎng)絡(luò)庫.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
8.5TcpServer 接受新連接. . . .. . . . . . . . . . . . . . . . . . . . . . . . 303
8.5.1TcpServer class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
8.5.2TcpConnection class . . . . . . . . . . . . . . . . . . . . . . . . . 305
8.6TcpConnection 斷開連接. . . .. . . . . . . . . . . . . . . . . . . . . . . 308
8.7Buffer 讀取數(shù)據(jù). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 313
8.7.1TcpConnection 使用Buffer 作為輸入緩沖.. . . . . . . . . . . . 314
8.7.2Buffer::readFd() . . . . . . . . . . . . . . . . . . . . . . . . . . 315
8.8TcpConnection 發(fā)送數(shù)據(jù). . . .. . . . . . . . . . . . . . . . . . . . . . . 316
8.9完善TcpConnection . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 320
8.9.1SIGPIPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
8.9.2TCP No Delay 和TCPkeepalive . . . . . . . . . . . . . . . . . . 321
8.9.3WriteCompleteCallback 和HighWaterMarkCallback. . . . . . . 322
8.10多線程TcpServer . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 324
8.11Connector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .327
8.12TcpClient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332
8.13epoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 333
8.14測試程序一覽. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 336
第3部分工程實(shí)踐經(jīng)驗(yàn)談
第9章分布式系統(tǒng)工程實(shí)踐339
9.1我們在技術(shù)浪潮中的位置. . . . . . . . . . . . . . . . .. . . . . . . . . . 341
9.1.1分布式系統(tǒng)的本質(zhì)困難. . . . . . . . . . . . . . . . .. . . . . . . 343
9.1.2分布式系統(tǒng)是個(gè)險(xiǎn)惡的問題. . . . . . . . . . . . . . . . .. . . . 344
9.2分布式系統(tǒng)的可靠性淺說. . . . . . . . . . . . . . . . .. . . . . . . . . . 349
9.2.1分布式系統(tǒng)的軟件不要求7 [1] 24 可靠.. . . . . . . . . . . . . . . 352
9.2.2“能隨時(shí)重啟進(jìn)程”作為程序設(shè)計(jì)目標(biāo).. . . . . . . . . . . . . . 354
9.3分布式系統(tǒng)中心跳協(xié)議的設(shè)計(jì). . . . . . . . . . . . . . . . .. . . . . . . 356
9.4分布式系統(tǒng)中的進(jìn)程標(biāo)識. . . . . . . . . . . . . . . . .. . . . . . . . . . 360
9.4.1錯(cuò)誤做法. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 361
9.4.2正確做法. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 362
9.4.3TCP 協(xié)議的啟示. . . . . . . . . . . . . . . . . . . .. . . . . . . . 363
9.5構(gòu)建易于維護(hù)的分布式程序. . . . . . . . . . . . . . . . .. . . . . . . . 364
9.6為系統(tǒng)演化做準(zhǔn)備. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 367
9.6.1可擴(kuò)展的消息格式. . . . . . . . . . . . . . . . .. . . . . . . . . 368
9.6.2反面教材:ICE 的消息打包格式.. . . . . . . . . . . . . . . . . . 369
9.7分布式程序的自動化回歸測試. . . . . . . . . . . . . . . . .. . . . . . . 370
9.7.1單元測試的能與不能. . . . . . . . . . . . . . . . .. . . . . . . . 370
9.7.2分布式系統(tǒng)測試的要點(diǎn). . . . . . . . . . . . . . . . .. . . . . . . 373
9.7.3分布式系統(tǒng)的抽象觀點(diǎn). . . . . . . . . . . . . . . . .. . . . . . . 374
9.7.4一種自動化的回歸測試方案. . . . . . . . . . . . . . . . .. . . . 375
9.7.5其他用處. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 379
9.8分布式系統(tǒng)部署、監(jiān)控與進(jìn)程管理的幾重境界. . . .. . . . . . . . . . . 380
9.8.1境界1:全手工操作.. . . . . . . . . . . . . . . . . . . . . . . . 382
9.8.2境界2:使用零散的自動化腳本和第三方組件.. . . . . . . . . . 383
9.8.3境界3:自制機(jī)群管理系統(tǒng),集中化配置.. . . . . . . . . . . . 386
9.8.4境界4:機(jī)群管理與namingservice 結(jié)合. . . .. . . . . . . . . 389
第10章C++ 編譯鏈接模型精要391
10.1C 語言的編譯模型及其成因. . . . . . . . . . . . . . . . .. . . . . . . . 394
10.1.1為什么C 語言需要預(yù)處理.. . . . . . . . . . . . . . . . . . . . . 395
10.1.2C 語言的編譯模型. . . . . . . . . . . . . . . . .. . . . . . . . . . 398
10.2C++ 的編譯模型. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 399
10.2.1單遍編譯. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 399
10.2.2前向聲明. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 402
10.3C++ 鏈接(linking). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
10.3.1函數(shù)重載. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 406
10.3.2inline 函數(shù). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 407
10.3.3模板. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 409
10.3.4虛函數(shù). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 414
10.4工程項(xiàng)目中頭文件的使用規(guī)則. . . . . . . . . . . . . . . . .. . . . . . . 415
10.4.1頭文件的害處. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 416
10.4.2頭文件的使用規(guī)則. . . . . . . . . . . . . . . . .. . . . . . . . . 417
10.5工程項(xiàng)目中庫文件的組織原則. . . . . . . . . . . . . . . . .. . . . . . . 418
10.5.1動態(tài)庫是有害的. . . . . . . . . . . . . . . . .. . . . . . . . . . . 423
10.5.2靜態(tài)庫也好不到哪兒去. . . . . . . . . . . . . . . . .. . . . . . . 424
10.5.3源碼編譯是王道. . . . . . . . . . . . . . . . .. . . . . . . . . . . 428
第11章反思C++ 面向?qū)ο笈c虛函數(shù)429
11.1樸實(shí)的C++ 設(shè)計(jì).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
11.2程序庫的二進(jìn)制兼容性. . . . . . . . . . . . . . . . .. . . . . . . . . . . 431
11.2.1什么是二進(jìn)制兼容性. . . . . . . . . . . . . . . . .. . . . . . . . 432
11.2.2有哪些情況會破壞庫的ABI . . . . . . . . . . . . . . .. . . . . . 433
11.2.3哪些做法多半是安全的. . . . . . . . . . . . . . . . .. . . . . . . 435
11.2.4反面教材:COM . . . . . . . . . . . . . . . . . .. . . . . . . . . 435
11.2.5解決辦法. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 436
11.3避免使用虛函數(shù)作為庫的接口. . . . . . . . . . . . . . . . .. . . . . . . 436
11.3.1C++ 程序庫的作者的生存環(huán)境. . . . . . . . . . . . . . . . .. . . 437
11.3.2虛函數(shù)作為庫的接口的兩大用途. . . . . . . . . . . . . . . . .. 438
11.3.3虛函數(shù)作為接口的弊端. . . . . . . . . . . . . . . . .. . . . . . . 439
11.3.4假如Linux 系統(tǒng)調(diào)用以COM接口方式實(shí)現(xiàn). . . . . . . . . . . . 442
11.3.5Java 是如何應(yīng)對的. . . . . . . . . . . . . . . . .. . . . . . . . . 443
11.4動態(tài)庫接口的推薦做法. . . . . . . . . . . . . . . . .. . . . . . . . . . . 443
11.5以boost::function 和boost::bind取代虛函數(shù). . . . . . . . . . . . . 447
11.5.1基本用途. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 450
11.5.2對程序庫的影響. . . . . . . . . . . . . . . . .. . . . . . . . . . . 451
11.5.3對面向?qū)ο蟪绦蛟O(shè)計(jì)的影響. . . . . . . . . . . . . . . . .. . . . 453
11.6iostream 的用途與局限. . . .. . . . . . . . . . . . . . . . . . . . . . . . 457
11.6.1stdio 格式化輸入輸出的缺點(diǎn). . . . . . . . . . . . . . . . .. . . . 457
11.6.2iostream 的設(shè)計(jì)初衷. . . .. . . . . . . . . . . . . . . . . . . . . 461
11.6.3iostream 與標(biāo)準(zhǔn)庫其他組件的交互. . . .. . . . . . . . . . . . . 463
11.6.4iostream 在使用方面的缺點(diǎn). . . .. . . . . . . . . . . . . . . . . 464
11.6.5iostream 在設(shè)計(jì)方面的缺點(diǎn). . . .. . . . . . . . . . . . . . . . . 468
11.6.6一個(gè)300 行的memorybuffer output stream . . . . . . . . . . . 476
11.6.7現(xiàn)實(shí)的C++ 程序如何做文件IO. . . . . . . . . . . . . . . . . . . 480
11.7值語義與數(shù)據(jù)抽象. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 482
11.7.1什么是值語義. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 482
11.7.2值語義與生命期. . . . . . . . . . . . . . . . .. . . . . . . . . . . 483
11.7.3值語義與標(biāo)準(zhǔn)庫. . . . . . . . . . . . . . . . .. . . . . . . . . . . 488
11.7.4值語義與C++ 語言.. . . . . . . . . . . . . . . . . . . . . . . . . 488
11.7.5什么是數(shù)據(jù)抽象. . . . . . . . . . . . . . . . .. . . . . . . . . . . 490
11.7.6數(shù)據(jù)抽象所需的語言設(shè)施. . . . . . . . . . . . . . . . .. . . . . 493
11.7.7數(shù)據(jù)抽象的例子. . . . . . . . . . . . . . . . .. . . . . . . . . . . 495
第12章C++ 經(jīng)驗(yàn)談501
12.1用異或來交換變量是錯(cuò)誤的. . . . . . . . . . . . . . . . .. . . . . . . . 501
12.1.1編譯器會分別生成什么代碼. . . . . . . . . . . . . . . . .. . . . 503
12.1.2為什么短的代碼不一定快. . . . . . . . . . . . . . . . .. . . . . 505
12.2不要重載全局:perator new() . . . . . . . .. . . . . . . . . . . . . . 507
12.2.1內(nèi)存管理的基本要求. . . . . . . . . . . . . . . . .. . . . . . . . 507
12.2.2重載:perator new() 的理由.. . . . . . . . . . . . . . . . . . 508
12.2.3:perator new() 的兩種重載方式. . . .. . . . . . . . . . . . . 508
12.2.4現(xiàn)實(shí)的開發(fā)環(huán)境. . . . . . . . . . . . . . . . .. . . . . . . . . . . 509
12.2.5重載:perator new() 的困境.. . . . . . . . . . . . . . . . . . 510
12.2.6解決辦法:替換malloc() . . . . . . . . . . . .. . . . . . . . . . 512
12.2.7為單獨(dú)的class 重載:peratornew() 有問題嗎. . . . . . . . . 513
12.2.8有必要自行定制內(nèi)存分配器嗎. . . . . . . . . . . . . . . . .. . . 513
12.3帶符號整數(shù)的除法與余數(shù). . . . . . . . . . . . . . . . .. . . . . . . . . . 514
12.3.1語言標(biāo)準(zhǔn)怎么說. . . . . . . . . . . . . . . . .. . . . . . . . . . . 515
12.3.2C/C++ 編譯器的表現(xiàn). . . . . . . . . . . . . . . . .. . . . . . . . 516
12.3.3其他語言的規(guī)定. . . . . . . . . . . . . . . . .. . . . . . . . . . . 516
12.3.4腳本語言解釋器代碼. . . . . . . . . . . . . . . . .. . . . . . . . 517
12.3.5硬件實(shí)現(xiàn). . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 521
12.4在單元測試中mock 系統(tǒng)調(diào)用.. . . . . . . . . . . . . . . . . . . . . . . 522
12.4.1系統(tǒng)函數(shù)的依賴注入. . . . . . . . . . . . . . . . .. . . . . . . . 522
12.4.2鏈接期墊片(link seam). . . . . . . . . . . . . . . . . . . . . . 524
12.5慎用匿名namespace . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 526
12.5.1C 語言的static 關(guān)鍵字的兩種用法.. . . . . . . . . . . . . . . . 526
12.5.2C++ 語言的static 關(guān)鍵字的四種用法.. . . . . . . . . . . . . . . 526
12.5.3匿名namespace 的不利之處.. . . . . . . . . . . . . . . . . . . . 527
12.5.4替代辦法. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 529
12.6采用有利于版本管理的代碼格式. . . . . . . . . . . . . . . . .. . . . . . 529
12.6.1對diff 友好的代碼格式.. . . . . . . . . . . . . . . . . . . . . . . 530
12.6.2對grep 友好的代碼風(fēng)格.. . . . . . . . . . . . . . . . . . . . . . 537
12.6.3一切為了效率. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 538
12.7再探std::string . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 539
12.7.1直接拷貝(eager copy). . . . . . . . . . . . . . . . . . . . . . . 540
12.7.2寫時(shí)復(fù)制(copy-on-write). . . . . . . . . . . . . . . . . . . . . 542
12.7.3短字符串優(yōu)化(SSO). . . . . . . . . . . . . . . . . . . . . . . . 543
12.8用STL algorithm 輕松解決幾道算法面試題.. . . . . . . . . . . . . . . 546
12.8.1用next_permutation() 生成排列與組合.. . . . . . . . . . . . . 546
12.8.2用unique() 去除連續(xù)重復(fù)空白.. . . . . . . . . . . . . . . . . . 548
12.8.3用{make,push,pop}_heap() 實(shí)現(xiàn)多路歸并.. . . . . . . . . . . 549
12.8.4用partition() 實(shí)現(xiàn)“重排數(shù)組,讓奇數(shù)位于偶數(shù)前面”. . . . 553
12.8.5用lower_bound() 查找IP地址所屬的城市. . . . . . . . . . . . . 554
第4部分附錄
附錄A談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)561
附錄B從《C++ Primer(第4版)》入手學(xué)習(xí)C++ 579
附錄C關(guān)于Boost 的看法591
附錄D關(guān)于TCP 并發(fā)連接的幾個(gè)思考題與試驗(yàn)593
參考文獻(xiàn)599
下載地址
Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫(陳碩) pdf掃描版
人氣書籍
UNIX網(wǎng)絡(luò)編程 卷1:套接字聯(lián)網(wǎng)API(第3版) 中文 PDF版 [85M]
深入理解Linux內(nèi)核(第三版) 帶完整書簽 PDF掃描版[56MB]
Ubuntu Linux從入門到精通 PDF 掃描版[59M]
unix環(huán)境高級編程(第3版) 中文版 pdf掃描版[21MB]
KVM虛擬化技術(shù):實(shí)戰(zhàn)與原理解析 PDF掃描版[108MB]
鳥哥的Linux私房菜 Linux基礎(chǔ)學(xué)習(xí)篇(第三版)
Linux/UNIX系統(tǒng)編程手冊 PDF掃描版[262MB]
Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(原書第3版)pdf掃描版[36.7MB]
Linux命令行大全 ((美)William E.shotts,Jr) 中文PDF高清掃描版
linux命令大全(15部最全面的CHM文檔) linux命令手冊集合
下載聲明
☉ 解壓密碼:chabaoo.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個(gè)軟件總是不能下載的請?jiān)谠u論中留言,我們會盡快修復(fù),謝謝!
☉ 下載本站資源,如果服務(wù)器暫不能下載請過一段時(shí)間重試!或者多試試幾個(gè)下載地址
☉ 如果遇到什么問題,請?jiān)u論留言,我們定會解決問題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請購買正版。
☉ 本站提供的Linux多線程服務(wù)端編程:使用muduo C++網(wǎng)絡(luò)庫(陳碩) pdf掃描版資源來源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。