Go底層原理與工程化實務
李樂 陳雷
- 出版商: 機械工業
- 出版日期: 2024-07-04
- 定價: $594
- 售價: 8.5 折 $505
- 語言: 簡體中文
- 頁數: 314
- 裝訂: 平裝
- ISBN: 7111758269
- ISBN-13: 9787111758266
立即出貨
相關主題
商品描述
全書分為2篇:
1.第1篇詳細介紹Go語言高效能優勢是如何實現的,包括經典的GMP調度模型,
Go語言調度器的實現,垃圾回收,以及如何基於管道、鎖等並發程式設計。
2.第二篇主要是專案實戰,手把手帶領讀者從0開始搭建高效能、高穩定的Go服務。
以及在面對線上問題時,如何調試、分析、解決。
透過學習本書,讀者對Go語言的核心——高並發會有一個深刻的認識,具備一定的Go並發程式設計經驗,
能夠獨立完成高效能、高穩定Go服務的架構設計,並且能夠基於一些工具進行Go線上問題分析與效能調優。
目錄大綱
目錄 Contents
前言
第1章 為什麼要了解Go底層1
1.1 Go服務怎麼出現502狀態碼了1
1.1.1 服務超時為什麼導致502狀態碼1
1.1.2 基於context的超時控制4
1.2 Go服務為什麼沒回應了7
1.2.1 誰阻塞了協程7
1.2.2 寫入管道可以不阻塞協程嗎10
1.3 Uber如何透過GC調優節約7萬個核心11
1.3.1 GC概述11
1.3.2 Uber半自動化GC調優13
1.4 Go語言進階路線15
1.4.1 Go語言快速入門16
1.4.2 Go高並發程式20
1.4.3 Go語言計畫實戰22
1.5 本章小結24
第2章 Go語言並發模型25
2.1 GMP調度模型25
2.1.1 Go語言並發程式設計入門25
2.1.2 GMP調度模型概述27
2.1.3 深入理解GMP調度模型30
2.2 協程管理33
2.2.1 基礎補充33
2.2.2 協程創建37
2.2.3 協程切換40
2.2.4 協程棧會溢位嗎42
2.2.5 協程退出45
2.3 調度器46
2.3.1 調度器實作原理46
2.3.2 時間片調度49
2.3.3 基於協作的搶佔式調度52
2.3.4 基於訊號的搶佔式調度53
2.4 本章小結54
第3章 調度器觸發時機55
3.1 網路I/O56
3.1.1 探索Go語言網絡I/O56
3.1.2 Go語言網路I/O與調度器59
3.1.3 如何實現網路讀寫逾時62
3.2 管道65
3.2.1 管道的基本用法65
3.2.2 管道與調度器67
3.3 定時器70
3.3.1 定時器的基本用法70
3.3.2 定時器與調度器73
3.4 系統呼叫75
3.4.1 系統呼叫會阻塞執行緒嗎75
3.4.2 系統呼叫與調度器77
3.5 本章小結79
第4章 Go語言並發程式設計80
4.1 什麼是並發問題80
4.2 CSP並發模型84
4.2.1 基於管道-協程的CSP模型84
4.2.2 管道與select關鍵字86
4.2.3 如何實現無限快取管道89
4.3 基於鎖的協程同步91
4.3.1 樂觀鎖91
4.3.2 悲觀鎖93
4.4 如何並發操作map95
4.4.1 map的並發問題96
4.4.2 並發散列表sync.Map98
4.5 並發控制sync.WaitGroup101
4.6 並發物件池sync. Pool103
4.7 如何實現單例模式104
4.8 並發檢測105
4.9 本章小結106
第5章 GC原理、調度與調優108
5.1 記憶體管理108
5.1.1 如何設計動態記憶體分配器108
5.1.2 Go語言記憶體分配器110
5.1.3 Go語言記憶體管理111
5.1.4 內存逃逸113
5.2 三色標記與寫屏障114
5.2.1 三色標記115
5.2.2 寫屏障117
5.3 標記與清理119
5.3.1 垃圾回收執行階段120
5.3.2 經典的stopTheWorld123
5.3.3 輔助標記125
5.3.4 內存清理127
5.4 GC調度與GC調優128
5.4.1 GC觸發時機128
5.4.2 GC協程調度模式131
5.4.3 快取框架bigcache中的GC調優133
5.5 本章小結135
第6章 手把手教你搭建Go專案136
6.1 Go專案架構設計 136
6.1.1 分層架構136
6.1.2 程式碼佈局138
6.1.3 命令管理cobra140
6.1.4 配置管理Viper142
6.2 Web框架Gin145
6.2.1 RESTful API145
6.2.2 引入Gin框架146
6.2.3 中間件149
6.2.4 如何記錄訪問日誌152
6.3 日誌與全鏈路追蹤154
6.3.1 引入日誌框架Zap154
6.3.2 基於context的全鏈路追蹤157
6.3.3 基於協程ID的全鏈路追蹤159
6.4 存取資料庫161
6.4.1 引入Gorm框架161
6.4.2 CURD165
6.4.3 事務170
6.4.4 如何記錄Trace日誌172
6.5 HTTP調用173
6.5.1 go-resty框架概述174
6.5.2 請求追蹤176
6.5.3 長連接還是短連接178
6.5.4 如何記錄Trace日誌180
6.6 單元測試181
6.6.1 Go語言中的單元測試181
6.6.2 引入單元測試183
6.7 本章小結184
第7章 高效能Go服務開發186
7.1 分庫分錶186
7.1.1 分庫分錶基本原理186
7.1.2 基於Gorm的分錶189
7.2 使用Redis快取191
7.2.1 go-redis的基本操作191
7.2.2 基於Redis的效能最佳化193
7.3 使用本地快取196
7.3.1 自己實作一個LRU緩存196
7.3.2 基於bigcache的效能最佳化198
7.4 資源復用200
7.4.1 協程復用之fasthttp200
7.4.2 連接復用之連接池203
7.4.3 物件複用之物件池205
7.5 其他207
7.5.1 異步化處理207
7.5.2 無鎖定程式設計209
7.6 本章小結210
第8章 高可用Go服務開發211
8.1 可用性定義與高可用三板斧 211
8.1.1 可用性定義211
8.1.2 高可用三板斧213
8.2 流量治理組件Sentinel215
8.2.1 Sentinel快速入門215
8.2.2 流量控制218
8.2.3 系統自適應流量控制220
8.2.4 熔斷降級222
8.2.5 Sentinel原理淺析224
8.3 Go服務監控225
8