深入理解 Go 並發編程:從原理到實踐,看這本就夠了
晁嶽攀(@鳥窩)
- 出版商: 電子工業
- 出版日期: 2023-11-01
- 定價: $948
- 售價: 7.9 折 $749
- 語言: 簡體中文
- 頁數: 416
- ISBN: 7121466465
- ISBN-13: 9787121466465
-
相關分類:
Go 程式語言
-
相關翻譯:
C 的快速 + Python 的易學 - Go語言全功能開發養成書 (繁中版)
銷售排行:
🥉 2024/2 簡體中文書 銷售排行 第 3 名
立即出貨 (庫存 < 4)
買這商品的人也買了...
-
人月神話:軟體專案管理之道 (20 週年紀念版)(The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition, 2/e)$480$379 -
領域驅動設計:軟體核心複雜度的解決方法 (Domain-Driven Design: Tackling Complexity in the Heart of Software)$680$530 -
$678大話通信 第2版 -
$454Go語言高併發與微服務實戰 -
再強一點:用 Go語言完成六個大型專案(書況不佳限門市銷售))$780$399 -
軟體架構原理|工程方法 (Fundamentals of Software Architecture: A Comprehensive Guide to Patterns, Characteristics, and Best Practices)$680$537 -
Kent Beck 的測試驅動開發:案例導向的逐步解決之道 (Test-Driven Development: By Example)(TDD)$560$437 -
$447Linux 設備驅動開發 -
React 學習手冊, 2/e (Learning React: Modern Patterns for Developing React Apps, 2/e)$580$458 -
資料密集型應用系統設計 (Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems)$980$774 -
完全自學!Go 語言 (Golang) 實戰聖經 (The Go Workshop: Learn to write clean, efficient code and build high-performance applications with Go)$880$695 -
最佳能效晶片平台 - ARM64 架構師高度之程式開發$980$774 -
$713Linux 高性能網絡詳解:從 DPDK、RDMA 到 XDP -
高效能 Go 程式設計|資料驅動的效能優化 (Efficient Go: Data-Driven Performance Optimization)$780$616 -
$760深入淺出 Go語言核心編程 -
Clean Architecture 實作篇:在整潔的架構上弄髒你的手 (第二版) (Get Your Hands Dirty on Clean Architecture, 2/e)$600$468 -
$828100個 Go語言典型錯誤 -
Staff 工程師之路|獻給個人貢獻者成長與改變的導航指南 (The Staff Engineer's Path)$580$458 -
從異世界歸來發現只剩自己不會 Kubernetes:初心者進入雲端世界的實戰攻略!(iThome鐵人賽系列書)【平裝】$650$507 -
$607SoC 設計指南:基於 Arm Cortex-M -
碼農翻身2$708$673 -
$857從零構建 Rust 生產級服務 -
AI PC 基礎 CPU 架構 - Arm Cortex-M4 STM32F407 HAL 開發實戰$1,080$853 -
$599Linux 是怎樣工作的 (增訂版) -
Linux 內核模塊開發技術指南$714$678
中文年末書展|繁簡參展書2書75折 詳見活動內容 »
-
75折
為你寫的 Vue Components:從原子到系統,一步步用設計思維打造面面俱到的元件實戰力 (iThome 鐵人賽系列書)$780$585 -
75折
BDD in Action, 2/e (中文版)$960$720 -
75折
看不見的戰場:社群、AI 與企業資安危機$750$563 -
79折
AI 精準提問 × 高效應用:DeepSeek、ChatGPT、Claude、Gemini、Copilot 一本搞定$390$308 -
7折
超實用!Word.Excel.PowerPoint 辦公室 Office 365 省時高手必備 50招, 4/e (暢銷回饋版)$420$294 -
75折
裂縫碎光:資安數位生存戰$550$412 -
日本當代最強插畫 2025 : 150位當代最強畫師豪華作品集$640$576 -
79折
Google BI 解決方案:Looker Studio × AI 數據驅動行銷實作,完美整合 Google Analytics 4、Google Ads、ChatGPT、Gemini$630$498 -
79折
超有料 Plus!職場第一實用的 AI 工作術 - 用對 AI 工具、自動化 Agent, 讓生產力全面進化!$599$473 -
75折
從零開始學 Visual C# 2022 程式設計, 4/e (暢銷回饋版)$690$518 -
75折
Windows 11 制霸攻略:圖解 AI 與 Copilot 應用,輕鬆搞懂新手必學的 Windows 技巧$640$480 -
75折
精準駕馭 Word!論文寫作絕非難事 (好評回饋版)$480$360 -
Sam Yang 的插畫藝術:用 Procreate / PS 畫出最強男友視角 x 女孩美好日常$699$629 -
79折
AI 加持!Google Sheets 超級工作流$599$473 -
78折
想要 SSR? 快使用 Nuxt 吧!:Nuxt 讓 Vue.js 更好處理 SEO 搜尋引擎最佳化(iThome鐵人賽系列書)$780$608 -
78折
超實用!業務.總管.人資的辦公室 WORD 365 省時高手必備 50招 (第二版)$500$390 -
7折
Node-RED + YOLO + ESP32-CAM:AIoT 智慧物聯網與邊緣 AI 專題實戰$680$476 -
79折
「生成式⇄AI」:52 個零程式互動體驗,打造新世代人工智慧素養$599$473 -
7折
Windows APT Warfare:惡意程式前線戰術指南, 3/e$720$504 -
75折
我輩程式人:回顧從 Ada 到 AI 這條程式路,程式人如何改變世界的歷史與未來展望 (We, Programmers: A Chronicle of Coders from Ada to AI)$850$637 -
75折
不用自己寫!用 GitHub Copilot 搞定 LLM 應用開發$600$450 -
79折
Tensorflow 接班王者:Google JAX 深度學習又快又強大 (好評回饋版)$780$616 -
79折
GPT4 會你也會 - 共融機器人的多模態互動式情感分析 (好評回饋版)$700$553 -
79折
技術士技能檢定 電腦軟體應用丙級術科解題教本|Office 2021$460$363 -
75折
Notion 與 Notion AI 全能實戰手冊:生活、學習與職場的智慧策略 (暢銷回饋版)$560$420
相關主題
商品描述
本書從標準庫的並發原語講起,循序漸進的介紹擴展庫、分佈式的並發原語、並發模式和經典並發問題。內容從並發原語的使用場景、使用方法、常見錯誤,內部實現多層次的講解,全面的介紹Go並發的知識。全書分為三個部分,主要部分又分為四個層次。第一部分主要介紹Go標準庫提供的各種並發類型(並發原語)的知識,方便初學Go語言的同學能夠掌握好Go語言的基礎能力,包括一些Go開發者都不熟悉的類型。第二部分屬於拔高的內容,介紹積累優秀的擴展庫,幫助Go開發者擴展思維,提高視野。這些擴展庫如果能夠掌握,在工作中會大有裨益。第三部分介紹分佈式並發原語。這部分內容鮮有人介紹,但是屬於因特網公司常用的一些場景,尤其是開發大型分佈式項目。很多讀者缺乏這方面的經驗和機會,通過閱讀此書,可以彌補這方面的知識的缺乏和實戰的機會。
作者簡介
晁嶽攀(@鳥窩),rpcx微服務框架作者,Go語言佈道師,技術專欄作家。
目錄大綱
第1章 Go並發編程和調度器
1.1 Go特別適合並發編程
1.2 並發 vs 並行
1.3 阿姆達爾定律:並發編程優化是有上限的
1.4 Go並發並不一定最快
1.5 Go運行時調度器
第2章 互斥鎖 Mutex
2.1 競爭條件與數據競爭
2.2 Mutex的用法
2.2.1 一個並發問題
2.2.2 Mutex的使用
2.2.3 地道的用法
2.3 檢查程序中的數據競爭
2.4 Mutex的歷史實現
2.4.1 初始版本
2.4.2 多給新的 goroutine 一些機會
2.4.3 多給競爭者一些機會
2.4.4 解決飢餓問題
2.4.5 TryLock
2.5 Mutex的使用陷阱
2.5.1 誤寫
2.5.2 死鎖
2.5.3 鎖重入
2.5.4 復制鎖
2.6 Mutex的擴展
2.6.1 可重入鎖
2.6.2 支持並發 map
2.6.3 封裝值
第3章 讀寫鎖 RWMutex
3.1 讀寫鎖的使用場景
3.2 讀寫鎖的使用方法
3.3 讀寫鎖的實現
3.3.1 RLock的實現
3.3.2 RUnlock的實現
3.3.3 Lock的實現
3.3.4 Unlock的實現
3.3.5 TryLock的實現
3.3.6 TryRLock的實現
3.4 讀寫鎖的使用陷阱
3.4.1 鎖重入
3.4.2 死鎖
3.4.3 發現死鎖
3.5 讀寫鎖的擴展
第4章 任務編排好幫手 WaitGroup
4.1 WaitGroup的使用方法
4.2 WaitGroup的實現
4.3 WaitGroup的使用陷阱
4.3.1 Add 方法調用的時機不對
4.3.2 計數器的值為負數
4.3.3 錯誤的調用 Add的時機
4.3.4 知名項目中關於 WaitGroup 使用的 bug
4.4 WaitGroup的擴展
4.5 noCopy:輔助 vet 檢查
第5章 條件變量 Cond
5.1 Cond的使用方法
5.2 Cond的實現
5.3 Cond的使用陷阱
5.3.1 調用 Wait 時沒有加鎖
5.3.2 喚醒之後不檢查判斷條件
5.4 在實際項目中使用 Cond的例子
第6章 單例化利器 Once
6.1 Once的使用方法
6.2 Once的實現
6.3 Once的使用陷阱
6.3.1 死鎖
6.3.2 未初始化
第7章 並發 map
7.1 線程安全的 map
7.1.1 使用 map的兩種常見錯誤
7.1.2 加讀寫鎖:擴展 map,支持並發讀/寫
7.2 sync.Map的使用方法
7.3 sync.Map的實現
7.3.1 Swap 方法
7.3.2 Load 方法
7.3.3 Delete 方法
7.4 分片加鎖:更高效的並發map
7.5 lock-free map
第8章 池 Pool
8.1 sync.Pool的使用方法
8.2 sync.Pool的實現
8.2.1 Get 方法的實現
8.2.2 Put 方法的實現
8.3 sync.Pool的使用陷阱
8.4 連接池
8.4.1 標準庫中的 HTTP Client 池
8.4.2 數據庫連接池
8.4.3 TCP 連 接池
8.4.4 Memcached Client 連接池
8.4.5 net/rpc 中的 Request/Response 對象池
8.5 goroutine/worker 池
第9章 不止是上下文:Context
9.1 Context的發展歷史
9.2 Context的使用方法
9.2.1 基本用法
9.2.2 傳遞上下文
9.2.3 可撤銷的上下文
9.2.4 帶超時功能的上下文
9.3 Context 實戰
9.4 Context的使用陷阱
9.5 Context的實現
9.5.1 WithValue的實現
9.5.2 WithCancel的實現
9.5.3 WithDeadline的實現
第10章 原子操作
10.1 原子操作的基礎知識
10.2 原子操作的使用場景
10.3 atomic 提供的函數和類型
10.3.1 AddXXX 函數
10.3.2 CompareAndSwapXXX 函數
10.3.3 SwapXXX 函數
10.3.4 LoadXXX 函數
10.3.5 StoreXXX 函數
10.3.6 Value 類型
10.3.7 Bool、Int32、Int64、Pointer、Uint32、Uint64、Uintptr
10.4 uber-go/atomic 庫
10.5 lock-free 隊列的實現
10.6 原子性和可見性
第11章 channel 基礎:另闢蹊徑解決並發問題
11.1 channel的歷史
11.2 channel的應用場景
11.3 channel的基本用法
11.4 channel的實現
11.4.1 channel的數據結構
11.4.2 初始化
11.4.3 發送數據
11.4.4 接收數據
11.4.5 關閉 channel
11.5 channel的使用陷阱 / 224
11.5.1 panic 和 goroutine 泄漏
11.5.2 知名項目踩過的坑
第12章 channel的內部實現和陷阱
12.1 使用反射操作 select 和 channel
12.2 channel的應用場景
第13章 Go內存模型
13.1 指令重排和可見性的問題
13.2 sequenced before、synchronized before 和 happens before
13.3 各種同步原語的同步保證
13.3.1 初始化
13.3.2 goroutine的運行
13.3.3 channel
13.3.4 鎖(Mutex 和 RWMutex)
13.3.5 Once
13.3.6 WaitGroup
13.3.7 atomic操作
13.3.8 Finalizer、sync.Cond、sync.Map 和 sync.Pool
13.4 不正確的同步
第14章 信號量 Semaphore
14.1 什麼是信號量
14.1.1 P/V 操作
14.1.2 信號量和互斥鎖的區別與聯系
14.2 信號量的 channel 實現
14.3 Go官方的信號量實現
14.4 使用信號量的常見錯誤
第15章 緩解壓力利器 SingleFlight
15.1 SingleFlight的實現
15.2 SingleFlight的使用場景
第16章 循環屏障 CyclicBarrier
16.1 CyclicBarrier的使用場景
16.2 CyclicBarrier的實現
16.3 使用 CyclicBarrier的例子
第17章 分組操作
17.1 ErrGroup
17.1.1 ErrGroup的基本用法
17.1.2 ErrGroup 使用示例
17.2 其他實用的 Group 同步原語
17.2.1 SizedGroup/ErrSizedGroup
17.2.2 gollback
17.2.3 Hunch
17.2.4 schedgroup
第18章 限流
18.1 基於令牌桶實現的限流庫
18.1.1 x/time/rate
18.1.2 juju/ratelimit
18.2 基於漏桶實現的限流庫
18.3 分佈式限流
第19章 Go並發編程和調度器
19.1 Leader 選舉
19.1.1 選舉
19.1.2 查詢
19.1.3 監控
19.2 鎖 Locker
19.3 互斥鎖 Mutex
19.4 讀寫鎖 RWMutex
19.5 分佈式隊列和優先級隊列
19.6 分佈式屏障
19.7 計數型屏障
19.8 軟件事務內存
第20章 並發模式
20.1 並發模式概述
20.2 半異步/半同步模式
20.3 活動對象模式
20.4 斷路器模式
20.5 截止時間和超時模式
20.6 迴避模式
20.7 雙重檢查模式
20.8 保護式掛起模式
20.9 核反應模式
20.10 調度器模式
20.11 反應器模式
20.12 Proactor模式
20.13 percpu模式
20.14 多進程模式
第21章 經典並發問題解析
21.1 哲學家就餐問題
21.1.1 模擬哲學家就餐問題
21.1.2 解法一:限制就餐人數
21.1.3 解法二:奇偶處理方法
21.1.4 解法三:資源分級
21.1.5 解法四:引入服務生
21.2 理發師問題
21.2.1 使用 sync.Cond 解決理發師問題
21.2.2 使用 channel 實現信號量
21.2.3 有多個理發師的情況
21.3 水工廠問題
21.4 fizz buzz 問題
21.4.1 將並發轉為串行
21.4.2 使用同一個channel
21.4.3 使用CyclicBarrier
