1. 程式人生 > >Go併發程式設計實戰 第2版.pdf

Go併發程式設計實戰 第2版.pdf

第1章 初識Go語言  1
1.1 語言特性  1
1.2 安裝和設定  2
1.3 工程結構  3
1.3.1 工作區  3
1.3.2 GOPATH  4
1.3.3 原始碼檔案  5
1.3.4 程式碼包  8
1.4 標準命令簡述  11
1.5 問候程式  13
1.6 小結  14
第2章 語法概覽  15
2.1 基本構成要素  15
2.1.1 識別符號  15
2.1.2 關鍵字  16
2.1.3 字面量  17
2.1.4 操作符  17
2.1.5 表示式  19
2.2 基本型別  20
2.3 高階型別  22
2.3.1 陣列  23
2.3.2 切片  23
2.3.3 字典  24
2.3.4 函式和方法  25
2.3.5 介面  28
2.3.6 結構體  29
2.4 流程控制  30
2.4.1 程式碼塊和作用域  30
2.4.2 if語句  32
2.4.3 switch語句  32
2.4.4 for語句  34
2.4.5 defer語句  36
2.4.6 panic和recover  38
2.5 聊天機器人  40
2.6 小結  44
第3章 併發程式設計綜述  45
3.1 併發程式設計基礎  45
3.1.1 序列程式與併發程式  46
3.1.2 併發程式與並行程式  46
3.1.3 併發程式與併發系統  47
3.1.4 併發程式的不確定性  47
3.1.5 併發程式內部的互動  47
3.2 多程序程式設計  48
3.2.1 程序  48
3.2.2 關於同步  55
3.2.3 管道  60
3.2.4 訊號  65
3.2.5 socket  74
3.3 多執行緒程式設計  97
3.3.1 執行緒  98
3.3.2 執行緒的同步  107
3.4 多執行緒與多程序  125
3.5 多核時代的併發程式設計  126
3.6 小結  130
第4章 Go的併發機制  131
4.1 原理探究  131
4.1.1 執行緒實現模型  132
4.1.2 排程器  142
4.1.3 更多細節  158
4.2 goroutine  160
4.2.1 go語句與goroutine  160
4.2.2 主goroutine的運作  166
4.2.3 runtime包與goroutine  166
4.3 channel  169
4.3.1 channel的基本概念  169
4.3.2 單向channel  180
4.3.3 for語句與channel  184
4.3.4 select語句  185
4.3.5 非緩衝的channel  190
4.3.6 time包與channel  192
4.4 實戰演練:載荷發生器  198
4.4.1 引數和結果  199
4.4.2 基本結構  201
4.4.3 初始化  206
4.4.4 啟動和停止  212
4.4.5 呼叫器和功能測試  221
4.5 小結  231
第5章 同  步  232
5.1 鎖的使用  232
5.1.1 互斥鎖  232
5.1.2 讀寫鎖  236
5.1.3 鎖的完整示例  238
5.2 條件變數  244
5.3 原子操作  247
5.3.1 增或減  247
5.3.2 比較並交換  249
5.3.3 載入  250
5.3.4 儲存  251
5.3.5 交換  251
5.3.6 原子值  252
5.3.7 應用於實際  256
5.4 只會執行一次  257
5.5 WaitGroup  258
5.6 臨時物件池  262
5.7 實戰演練——Concurrent Map  265
5.8 小結  280
第6章 網路爬蟲框架設計和實現  281
6.1 網路爬蟲與框架  281
6.2 功能需求和分析  283
6.3 總體設計  284
6.4 詳細設計  286
6.4.1 基本資料結構  286
6.4.2 介面的設計  293
6.5 工具的實現  309
6.5.1 緩衝器  309
6.5.2 緩衝池  311
6.5.3 多重讀取器  317
6.6 元件的實現  318
6.6.1 內部基礎介面  319
6.6.2 元件註冊器  321
6.6.3 下載器  323
6.6.4 分析器  325
6.6.5 條目處理管道  328
6.7 排程器的實現  329
6.7.1 基本結構  329
6.7.2 初始化  331
6.7.3 啟動  333
6.7.4 停止  343
6.7.5 其他方法  344
6.7.6 總結  345
6.8 一個簡單的圖片爬蟲  346
6.8.1 概述  346
6.8.2 命令引數  346
6.8.3 初始化排程器  348
6.8.4 監控排程器  354
6.8.5 啟動排程器  364
6.9 擴充套件與思路  365
6.10 本章小結  368
附錄A Go語言的學習資源  369