深入理解Go并發(fā)編程 從原理到實踐,看這本就夠了 版權(quán)信息
- ISBN:9787121466465
- 條形碼:9787121466465 ; 978-7-121-46646-5
- 裝幀:平裝-膠訂
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
深入理解Go并發(fā)編程 從原理到實踐,看這本就夠了 本書特色
● 全面。本書詳細(xì)介紹了Go標(biāo)準(zhǔn)庫中的每一個同步原語,并且補(bǔ)充介紹了Go官方擴(kuò)展庫的同步原語,以及很多第三方的并發(fā)庫。本書還全面介紹了基于etcd的分布式同步原語,讀者在開發(fā)分布式程序的時候它很有參考價值。本書還梳理了Go并發(fā)模式,讀者可以系統(tǒng)性地了解采用并發(fā)模式要解決的問題。 ● 由淺入深。每個同步原語一開始都會介紹其使用場景和基本的使用方法,很多同步原語都會介紹其實現(xiàn),讀者可以深入了解同步原語背后的原理。書中有作者多年開發(fā)經(jīng)驗的總結(jié)和梳理,讓讀者少走彎路。 ● 實戰(zhàn)。書中包含大量的示例,獨創(chuàng)性地梳理了同步原語使用陷阱,還專門列出了知名項目如Kubernetes、Docker、gRPC等項目中出現(xiàn)的并發(fā)錯誤,讓讀者切身感受到知名項目的有經(jīng)驗的Go程序員也會犯的錯。 ● 獨立。各章之間沒有依賴性,每一章都是獨立的,讀者可以從任意一章開始進(jìn)行學(xué)習(xí)。正如“極客時間”的一位讀者所說,課程需要反復(fù)學(xué)幾遍才能理解透,所以希望讀者也能勤翻一翻本書,多學(xué)習(xí)幾遍,把相關(guān)知識掌握透徹。 晁岳攀老師是國內(nèi)公認(rèn)的Go語言大師,他對Go語言的研究和貢獻(xiàn)深得開發(fā)者喜愛。記得在GopherChina大會上,晁老師做的關(guān)于Go并發(fā)編程的分享廣受好評。如今,晁老師將他對Go并發(fā)編程的獨到見解融入本書中,令人萬分期待!雖然并發(fā)編程是一個極具挑戰(zhàn)性的領(lǐng)域,但晁老師以他一貫的通俗易懂的風(fēng)格闡釋復(fù)雜的并發(fā)概念,讓讀者在輕松愉悅中掌握Go語言強(qiáng)大的并發(fā)能力。本書將成為Go語言并發(fā)編程的經(jīng)典入門讀物。 ——謝孟軍(Astaxie),積夢智能CEO,GopherChina發(fā)起人 本書以圖文并茂的方式講解Go語言并發(fā)編程,讓讀者能夠真正看得懂、學(xué)得會、用得好。鳥窩大佬的不少文章皆通俗易懂,該書亦是如此。 ——徐新華(polarisxu),Go語言中文網(wǎng)站長 鳥窩老師的這本書是目前Go領(lǐng)域講并發(fā)頗為深入的材料,幾乎覆蓋了所有Go語言的并發(fā)原語原理和使用指南。如果大家想要用Go來深入了解并發(fā)知識,有這本書就夠了。 ——曹春暉(Xargin),資深Gopher 這是一本非常具有指導(dǎo)性的書,旨在幫助讀者從根本上理解并發(fā),并逐步學(xué)習(xí)并發(fā)編程。從第1章開始,本書就通過風(fēng)趣的案例解釋了并發(fā)的概念,內(nèi)容簡單易懂。特別是“鳥窩客棧”這個案例給我留下了深刻的印象。 ——楊文,Go夜讀創(chuàng)始人 鳥窩老師在本書中深入淺出地剖析了Go語言的并發(fā)編程,內(nèi)容豐富,案例翔實,是學(xué)習(xí)Go并發(fā)編程的好讀物。對Go語言感興趣的讀者,一定不能錯過這本優(yōu)秀的書。 ——白明(Tony Bai),《Go語言精進(jìn)之路》作者,tonybai.com博主 Go語言入門容易,精通難,尤其是并發(fā)部分!對于希望深入學(xué)習(xí)Go并發(fā)的開發(fā)者來說,這本書可以讓你深入理解Go并發(fā)易用性背后的實現(xiàn)原理。 ——萬俊峰,go-zero微服務(wù)框架作者,資深Gopher和Go語言布道師
深入理解Go并發(fā)編程 從原理到實踐,看這本就夠了 內(nèi)容簡介
本書分為四大部分。第1部分包括第1~13章,主要介紹Go標(biāo)準(zhǔn)庫的同步原語,包括互斥鎖Mutex、讀寫鎖RWMutex、WaitGroup、條件變量Cond、Once、Map、Pool、Context、channel等,以及近期新的原子操作知識,其中重點介紹了channel,*后還介紹了Go的內(nèi)存模 型。第2部分包括第14~18章,主要介紹Go官方的擴(kuò)展庫和第三方的同步原語,包括信號量、SingleFlight、CyclicBarrier、分組操作庫、限流庫等。第3部分包括第19章,主要介紹基于etcd的分布式同步(并發(fā))原語。第4部分包括第20章和第21章,主要歸納總結(jié)Go的并發(fā)模式,并嘗試使用本書介紹的同步原語解決經(jīng)典的并發(fā)問題。
本書主要面向的是已經(jīng)具有Go軟件編程開發(fā)經(jīng)驗的工程師、基礎(chǔ)架構(gòu)軟件開發(fā)工程師和架構(gòu)師,需要初步和深入了解Go并發(fā)編程的相關(guān)知識,設(shè)計和實現(xiàn)高并發(fā)的基礎(chǔ)軟件與分布式系統(tǒng)的專業(yè)人員,以及對Go并發(fā)感興趣的讀者。
深入理解Go并發(fā)編程 從原理到實踐,看這本就夠了 目錄
1.1 Go特別適合并發(fā)編程
1.2 并發(fā) vs 并行
1.3 阿姆達(dá)爾定律:并發(fā)編程優(yōu)化是有上限的
1.4 Go并發(fā)并不一定*快
1.5 Go運(yùn)行時調(diào)度器
第2章 互斥鎖 Mutex
2.1 競爭條件與數(shù)據(jù)競爭
2.2 Mutex的用法
2.2.1 一個并發(fā)問題
2.2.2 Mutex的使用
2.2.3 地道的用法
2.3 檢查程序中的數(shù)據(jù)競爭
2.4 Mutex的歷史實現(xiàn)
2.4.1 初始版本
2.4.2 多給新的 goroutine 一些機(jī)會
2.4.3 多給競爭者一些機(jī)會
2.4.4 解決饑餓問題
2.4.5 TryLock
2.5 Mutex的使用陷阱
2.5.1 誤寫
2.5.2 死鎖
2.5.3 鎖重入
2.5.4 復(fù)制鎖
2.6 Mutex的擴(kuò)展
2.6.1 可重入鎖
2.6.2 支持并發(fā) map
2.6.3 封裝值
第3章 讀寫鎖 RWMutex
3.1 讀寫鎖的使用場景
3.2 讀寫鎖的使用方法
3.3 讀寫鎖的實現(xiàn)
3.3.1 RLock的實現(xiàn)
3.3.2 RUnlock的實現(xiàn)
3.3.3 Lock的實現(xiàn)
3.3.4 Unlock的實現(xiàn)
3.3.5 TryLock的實現(xiàn)
3.3.6 TryRLock的實現(xiàn)
3.4 讀寫鎖的使用陷阱
3.4.1 鎖重入
3.4.2 死鎖
3.4.3 發(fā)現(xiàn)死鎖
3.5 讀寫鎖的擴(kuò)展
第4章 任務(wù)編排好幫手 WaitGroup
4.1 WaitGroup的使用方法
4.2 WaitGroup的實現(xiàn)
4.3 WaitGroup的使用陷阱
4.3.1 Add 方法調(diào)用的時機(jī)不對
4.3.2 計數(shù)器的值為負(fù)數(shù)
4.3.3 錯誤的調(diào)用 Add的時機(jī)
4.3.4 知名項目中關(guān)于 WaitGroup 使用的 bug
4.4 WaitGroup的擴(kuò)展
4.5 noCopy:輔助 vet 檢查
第5章 條件變量 Cond
5.1 Cond的使用方法
5.2 Cond的實現(xiàn)
5.3 Cond的使用陷阱
5.3.1 調(diào)用 Wait 時沒有加鎖
5.3.2 喚醒之后不檢查判斷條件
5.4 在實際項目中使用 Cond的例子
第6章 單例化利器 Once
6.1 Once的使用方法
6.2 Once的實現(xiàn)
6.3 Once的使用陷阱
6.3.1 死鎖
6.3.2 未初始化
第7章 并發(fā) map
7.1 線程安全的 map
7.1.1 使用 map的兩種常見錯誤
7.1.2 加讀寫鎖:擴(kuò)展 map,支持并發(fā)讀/寫
7.2 sync.Map的使用方法
7.3 sync.Map的實現(xiàn)
7.3.1 Swap 方法
7.3.2 Load 方法
7.3.3 Delete 方法
7.4 分片加鎖:更高效的并發(fā)map
7.5 lock-free map
第8章 池 Pool
8.1 sync.Pool的使用方法
8.2 sync.Pool的實現(xiàn)
8.2.1 Get 方法的實現(xiàn)
8.2.2 Put 方法的實現(xiàn)
8.3 sync.Pool的使用陷阱
8.4 連接池
8.4.1 標(biāo)準(zhǔn)庫中的 HTTP Client 池
8.4.2 數(shù)據(jù)庫連接池
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的發(fā)展歷史
9.2 Context的使用方法
9.2.1 基本用法
9.2.2 傳遞上下文
9.2.3 可撤銷的上下文
9.2.4 帶超時功能的上下文
9.3 Context 實戰(zhàn)
9.4 Context的使用陷阱
9.5 Context的實現(xiàn)
9.5.1 WithValue的實現(xiàn)
9.5.2 WithCancel的實現(xiàn)
9.5.3 WithDeadline的實現(xiàn)
第10章 原子操作
10.1 原子操作的基礎(chǔ)知識
10.2 原子操作的使用場景
10.3 atomic 提供的函數(shù)和類型
10.3.1 AddXXX 函數(shù)
10.3.2 CompareAndSwapXXX 函數(shù)
10.3.3 SwapXXX 函數(shù)
10.3.4 LoadXXX 函數(shù)
10.3.5 StoreXXX 函數(shù)
10.3.6 Value 類型
10.3.7 Bool、Int32、Int64、Pointer、Uint32、Uint64、Uintptr
10.4 uber-go/atomic 庫
10.5 lock-free 隊列的實現(xiàn)
10.6 原子性和可見性
第11章 channel 基礎(chǔ):另辟蹊徑解決并發(fā)問題
11.1 channel的歷史
11.2 channel的應(yīng)用場景
11.3 channel的基本用法
11.4 channel的實現(xiàn)
11.4.1 channel的數(shù)據(jù)結(jié)構(gòu)
11.4.2 初始化
11.4.3 發(fā)送數(shù)據(jù)
11.4.4 接收數(shù)據(jù)
11.4.5 關(guān)閉 channel
11.5 channel的使用陷阱 / 224
11.5.1 panic 和 goroutine 泄漏
11.5.2 知名項目踩過的坑
第12章 channel的內(nèi)部實現(xiàn)和陷阱
12.1 使用反射操作 select 和 channel
12.2 channel的應(yīng)用場景
第13章 Go內(nèi)存模型
13.1 指令重排和可見性的問題
13.2 sequenced before、synchronized before 和 happens before
13.3 各種同步原語的同步保證
13.3.1 初始化
13.3.2 goroutine的運(yùn)行
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 信號量和互斥鎖的區(qū)別與聯(lián)系
14.2 信號量的 channel 實現(xiàn)
14.3 Go官方的信號量實現(xiàn)
14.4 使用信號量的常見錯誤
第15章 緩解壓力利器 SingleFlight
15.1 SingleFlight的實現(xiàn)
15.2 SingleFlight的使用場景
第16章 循環(huán)屏障 CyclicBarrier
16.1 CyclicBarrier的使用場景
16.2 CyclicBarrier的實現(xiàn)
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 基于令牌桶實現(xiàn)的限流庫
18.1.1 x/time/rate
18.1.2 juju/ratelimit
18.2 基于漏桶實現(xiàn)的限流庫
18.3 分布式限流
第19章 Go并發(fā)編程和調(diào)度器
19.1 Leader 選舉
19.1.1 選舉
19.1.2 查詢
19.1.3 監(jiān)控
19.2 鎖 Locker
19.3 互斥鎖 Mutex
19.4 讀寫鎖 RWMutex
19.5 分布式隊列和優(yōu)先級隊列
19.6 分布式屏障
19.7 計數(shù)型屏障
19.8 軟件事務(wù)內(nèi)存
第20章 并發(fā)模式
20.1 并發(fā)模式概述
20.2 半異步/半同步模式
20.3 活動對象模式
20.4 斷路器模式
20.5 截止時間和超時模式
20.6 回避模式
20.7 雙重檢查模式
20.8 保護(hù)式掛起模式
20.9 核反應(yīng)模式
20.10 調(diào)度器模式
20.11 反應(yīng)器模式
20.12 Proactor模式
20.13 percpu模式
20.14 多進(jìn)程模式
第21章 經(jīng)典并發(fā)問題解析
21.1 哲學(xué)家就餐問題
21.1.1 模擬哲學(xué)家就餐問題
21.1.2 解法一:限制就餐人數(shù)
21.1.3 解法二:奇偶處理方法
21.1.4 解法三:資源分級
21.1.5 解法四:引入服務(wù)生
21.2 理發(fā)師問題
21.2.1 使用 sync.Cond 解決理發(fā)師問題
21.2.2 使用 channel 實現(xiàn)信號量
21.2.3 有多個理發(fā)師的情況
21.3 水工廠問題
21.4 fizz buzz 問題
21.4.1 將并發(fā)轉(zhuǎn)為串行
21.4.2 使用同一個channel
21.4.3 使用CyclicBarrier
深入理解Go并發(fā)編程 從原理到實踐,看這本就夠了 作者簡介
晁岳攀(@鳥窩),rpcx微服務(wù)框架作者,Go語言布道師,技術(shù)專欄作家。
- >
新文學(xué)天穹兩巨星--魯迅與胡適/紅燭學(xué)術(shù)叢書(紅燭學(xué)術(shù)叢書)
- >
人文閱讀與收藏·良友文學(xué)叢書:一天的工作
- >
史學(xué)評論
- >
巴金-再思錄
- >
李白與唐代文化
- >
名家?guī)阕x魯迅:故事新編
- >
詩經(jīng)-先民的歌唱
- >
【精裝繪本】畫給孩子的中國神話