深入理解高並發編程

《深入理解高並發編程》是一本電子工業出版社出版的圖書,作者是冰河。

基本介紹

  • 中文名:深入理解高並發編程
  • 作者:冰河
  • 出版時間:2022年6月
  • 出版社:電子工業出版社
  • 頁數:372 頁
  • ISBN:9787121434693
內容簡介,圖書目錄,作者簡介,

內容簡介

《深入理解高並發編程》從實際需求出發,全面細緻地介紹了高並發編程的基礎知識、核心原理、實戰案例和系統架構等內容。通過閱讀和學習本書,讀者可以對高並發編程有更加全面、深入、透徹的理解,提高對高並發編程問題的處理能力和項目實戰能力,並站在更高的層面解決高並發編程系統架構問題。

圖書目錄

第1篇 基礎知識
第1章 作業系統執行緒調度 2
1.1 馮·諾依曼體系結構 2
1.1.1 概述 2
1.1.2 計算機五大組成部分 3
1.2 CPU架構 5
1.2.1 CPU的組成部分 5
1.2.2 CPU邏輯結構 6
1.2.3 單核CPU的不足 8
1.2.4 多核CPU架構 8
1.2.5 多CPU架構 10
1.3 作業系統執行緒 11
1.3.1 用戶級執行緒 11
1.3.2 核心級執行緒 12
1.3.3 混合級執行緒 14
1.4 Java執行緒與作業系統執行緒的關係 15
1.5 本章總結 16
第2章 並發編程概述 17
2.1 並發編程的基本概念 17
2.1.1 程式 17
2.1.2 進程與執行緒 17
2.1.3 執行緒組 18
2.1.4 用戶執行緒與守護執行緒 19
2.1.5 並行與並發 20
2.1.6 同步與異步 21
2.1.7 共享與獨享 21
2.1.8 臨界區 22
2.1.9 阻塞與非阻塞 22
2.2 並發編程的風險 22
2.2.1 安全性問題 22
2.2.2 活躍性問題 23
2.2.3 性能問題 24
2.3 並發編程中的鎖 24
2.3.1 悲觀鎖與樂觀鎖 24
2.3.2 公平鎖與非公平鎖 25
2.3.3 獨占鎖與共享鎖 26
2.3.4 可重入鎖與不可重入鎖 26
2.3.5 可中斷鎖與不可中斷鎖 26
2.3.6 讀/寫鎖 27
2.3.7 自旋鎖 27
2.3.8 死鎖、飢餓與活鎖 27
2.4 本章總結 28
第2篇 核心原理
第3章 並發編程的三大核心問題 30
3.1 分工問題 30
3.1.1 類比現實案例 30
3.1.2 並發編程中的分工 32
3.2 同步問題 32
3.2.1 類比現實案例 33
3.2.2 並發編程中的同步 33
3.3 互斥問題 35
3.3.1 類比現實案例 35
3.3.2 並發編程中的互斥 35
3.4 本章總結 36
第4章 並發編程的本質問題 37
4.1 計算機的核心矛盾 37
4.1.1 核心矛盾概述 37
4.1.2 CPU如何解決核心矛盾 38
4.1.3 作業系統如何解決核心矛盾 38
4.1.4 編譯程式如何解決核心矛盾 38
4.1.5 引發的問題 39
4.2 原子性 39
4.2.1 原子性概述 39
4.2.2 原子性問題 41
4.2.3 Java中的原子性問題 42
4.2.4 原子性問題總結 46
4.3 可見性 46
4.3.1 可見性概述 46
4.3.2 可見性問題 47
4.3.3 Java中的可見性問題 49
4.3.4 可見性問題總結 51
4.4 有序性 51
4.4.1 有序性概述 51
4.4.2 有序性問題 52
4.4.3 Java中的有序性問題 53
4.4.4 有序性問題總結 56
4.5 解決方案 57
4.5.1 原子性問題解決方案 57
4.5.2 可見性與有序性問題解決方案 57
4.6 本章總結 58
第5章 原子性的核心原理 59
5.1 原子性原理 59
5.2 處理器保證原子性 60
5.2.1 CPU保證基本記憶體操作的原子性 60
5.2.2 匯流排鎖保證原子性 60
5.2.3 快取鎖保證原子性 62
5.3 互斥鎖保證原子性 62
5.3.1 互斥鎖模型 62
5.3.2 最佳化後的互斥鎖模型 63
5.4 CAS保證原子性 64
5.5 本章總結 64
第6章 可見性與有序性核心原理 65
6.1 CPU多級快取架構 65
6.1.1 CPU為何使用多級快取架構 65
6.1.2 CPU多級快取架構原理 66
6.1.3 CPU的計算流程 67
6.2 快取一致性 68
6.2.1 什麼是快取一致性 68
6.2.2 快取一致性協定 69
6.2.3 MESI協定快取狀態 70
6.2.4 MESI協定的狀態轉換 70
6.2.5 MESI協定帶來的問題 76
6.3 偽共享 76
6.3.1 偽共享的概念 76
6.3.2 偽共享產生的場景 77
6.3.3 如何解決偽共享問題 77
6.4 volatile核心原理 78
6.4.1 保證可見性核心原理 78
6.4.2 保證有序性核心原理 79
6.4.3 volatile的局限性 81
6.5 記憶體屏障 82
6.5.1 編譯器重排序 82
6.5.2 CPU重排序 83
6.5.3 as-if-serial原則 83
6.5.4 計算機硬體實現的記憶體屏障 84
6.6 Java記憶體模型 84
6.6.1 Java記憶體模型的概念 85
6.6.2 Java記憶體模型的八大操作 85
6.6.3 Java記憶體模型解決可見性與有序性問題 87
6.7 Happens-Before原則 90
6.7.1 Happens-Before原則概述 90
6.7.2 程式次序原則 90
6.7.3 volatile變數原則 91
6.7.4 傳遞原則 91
6.7.5 鎖定原則 91
6.7.6 執行緒啟動原則 92
6.7.7 執行緒終結原則 93
6.7.8 執行緒中斷原則 93
6.7.9 對象終結原則 94
6.8 本章總結 95
第7章 synchronized核心原理 96
7.1 synchronized用法 96
7.1.1 同步實例方法 97
7.1.2 同步靜態方法 98
7.1.3 同步代碼塊 99
7.2 Java對象結構 102
7.2.1 對象結構總覽 102
7.2.2 對象頭 103
7.2.3 實例數據 103
7.2.4 對齊填充 103
7.3 Java對象頭 104
7.3.1 Mark Word 104
7.3.2 類型指針 106
7.3.3 數組長度 106
7.4 使用JOL查看對象信息 107
7.4.1 引入JOL環境依賴 107
7.4.2 列印對象信息 107
7.4.3 列印對象鎖狀態 109
7.5 synchronized核心原理 115
7.5.1 synchronized底層原理 115
7.5.2 Monitor鎖原理 116
7.5.3 反編譯synchronized方法 118
7.5.4 反編譯synchronized代碼塊 119
7.6 偏向鎖 121
7.6.1 偏向鎖核心原理 122
7.6.2 偏向鎖的撤銷 122
7.6.3 偏向鎖案例 123
7.7 輕量級鎖 124
7.7.1 輕量級鎖核心原理 124
7.7.2 輕量級鎖案例 126
7.8 重量級鎖 127
7.8.1 重量級鎖核心原理 127
7.8.2 重量級鎖案例 127
7.9 鎖升級的過程 129
7.10 鎖消除 130
7.11 本章總結 131
第8章 AQS核心原理 132
8.1 AQS核心數據結構 132
8.1.1 AQS數據結構原理 132
8.1.2 AQS內部佇列模式 133
8.2 AQS底層鎖的支持 134
8.2.1 核心狀態位 134
8.2.2 核心節點類 135
8.2.3 獨占鎖模式 137
8.2.4 共享鎖模式 142
8.3 本章總結 145
第9章 Lock鎖核心原理 146
9.1 顯示鎖 146
9.2 公平鎖與非公平鎖 148
9.2.1 公平鎖原理 148
9.2.2 ReentrantLock中的公平鎖 149
9.2.3 公平鎖實戰 153
9.2.4 非公平鎖原理 154
9.2.5 ReentrantLock中的非公平鎖 156
9.2.6 非公平鎖實戰 159
9.3 悲觀鎖與樂觀鎖 159
9.3.1 悲觀鎖原理 160
9.3.2 悲觀鎖實戰 160
9.3.3 樂觀鎖原理 162
9.3.4 樂觀鎖實戰 162
9.4 可中斷鎖與不可中斷鎖 163
9.4.1 可中斷鎖原理 163
9.4.2 可中斷鎖實戰 164
9.4.3 不可中斷鎖原理 166
9.4.4 不可中斷鎖實戰 166
9.5 排他鎖與共享鎖 167
9.5.1 排他鎖原理 167
9.5.2 排他鎖實戰 167
9.5.3 共享鎖原理 169
9.5.4 共享鎖實戰 169
9.6 可重入鎖 170
9.6.1 可重入鎖原理 170
9.6.2 可重入鎖實戰 172
9.7 讀/寫鎖 175
9.7.1 讀/寫鎖原理 175
9.7.2 ReadWriteLock讀/寫鎖 176
9.7.3 ReadWriteLock鎖降級 177
9.7.4 StampedLock讀/寫鎖 178
9.7.5 StampedLock鎖的升級與降級 179
9.7.6 讀/寫鎖實戰 182
9.8 LockSupport 185
9.8.1 LockSupport原理 185
9.8.2 LockSupport實戰 185
9.9 本章總結 187
第10章 CAS核心原理 188
10.1 CAS的基本概念 188
10.2 CAS的核心類Unsafe 189
10.2.1 Unsafe類的核心方法 190
10.2.2 Unsafe類實戰 192
10.3 使用CAS實現count++ 194
10.3.1 案例分析 194
10.3.2 程式實現 194
10.3.3 測試程式 198
10.4 ABA問題 199
10.4.1 ABA問題概述 199
10.4.2 ABA問題解決方案 200
10.4.3 Java如何解決ABA問題 200
10.5 本章總結 202
第11章 死鎖的核心原理 203
11.1 死鎖的基本概念 203
11.2 死鎖的分析 204
11.2.1 執行緒不安全 204
11.2.2 串列執行 206
11.2.3 發生死鎖 208
11.3 形成死鎖的必要條件 210
11.4 死鎖的預防 210
11.5 本章總結 216
第12章 鎖最佳化 217
12.1 縮小鎖的範圍 217
12.2 減小鎖的粒度 219
12.3 鎖分離 220
12.4 鎖分段 221
12.5 鎖粗化 221
12.6 避免熱點區域問題 222
12.7 獨占鎖的替換方案 223
12.8 其他最佳化方案 223
12.9 本章總結 223
第13章 執行緒池核心原理 224
13.1 執行緒池的核心狀態 224
13.1.1 核心狀態說明 224
13.1.2 核心狀態的流轉過程 225
13.2 執行緒池的創建方式 227
13.2.1 通過Executors類創建執行緒池 227
13.2.2 通過ThreadPoolExecutor類創建執行緒池 229
13.2.3 通過ForkJoinPool類創建執行緒池 232
13.2.4 通過ScheduledThreadPoolExecutor類創建執行緒池 234
13.3 執行緒池執行任務的核心流程 235
13.3.1 執行任務的流程 235
13.3.2 拒絕策略 237
13.4 執行緒池的關閉方式 238
13.4.1 shutdown( )方法 238
13.4.2 shutdownNow( )方法 238
13.5 如何確定最佳執行緒數 238
13.5.1 CPU密集型程式 238
13.5.2 I/O密集型程式 239
13.6 本章總結 239
第14章 ThreadLocal核心原理 240
14.1 ThreadLocal的基本概念 240
14.2 ThreadLocal的使用案例 241
14.3 ThreadLocal的核心原理 244
14.3.1 Thread類源碼 244
14.3.2 set( )方法 244
14.3.3 get( )方法 245
14.3.4 remove( )方法 247
14.4 ThreadLocal變數的不繼承性 247
14.5 InheritableThreadLocal的使用案例 249
14.6 InheritableThreadLocal的核心原理 250
14.7 本章總結 253
第3篇 實戰案例
第15章 手動開發執行緒池實戰 256
15.1 案例概述 256
15.2 項目搭建 257
15.3 核心類實現 257
15.3.1 定義核心欄位 257
15.3.2 創建內部類WorkThread 258
15.3.3 創建執行緒池的構造方法 259
15.3.4 創建執行任務的方法 260
15.3.5 創建關閉執行緒池的方法 260
15.3.6 完整原始碼示例 260
15.4 測試程式 262
15.5 本章總結 264
第16章 基於CAS實現自旋鎖實戰 265
16.1 案例概述 265
16.2 項目搭建 266
16.3 核心類實現 266
16.3.1 CasLock接口實現 266
16.3.2 MyCasLock類實現 267
16.4 測試程式 268
16.5 本章總結 270
第17章 基於讀/寫鎖實現快取實戰 271
17.1 案例概述 271
17.2 項目搭建 272
17.3 核心類實現 272
17.3.1 ReadWriteCache<K, V>核心接口的實現 272
17.3.2 ConcurrentReadWriteCache<K, V>核心類的實現 273
17.4 測試程式 278
17.5 本章總結 279
第18章 基於AQS實現可重入鎖實戰 280
18.1 案例概述 280
18.2 項目搭建 281
18.3 核心類實現 281
18.3.1 AQSSync內部類的實現 281
18.3.2 ReentrantAQSLock核心類的實現 284
18.3.3 完整原始碼 285
18.4 測試程式 287
18.5 本章總結 290
第4篇 系統架構
第19章 深度解密分散式鎖架構 292
19.1 鎖解決的本質問題 292
19.2 電商超賣問題 292
19.2.1 超賣問題概述 293
19.2.2 超賣問題案例 293
19.3 JVM提供的鎖 295
19.3.1 JVM鎖的原理 295
19.3.2 JVM鎖的不足 295
19.4 分散式鎖 297
19.4.1 分散式鎖的實現方法 297
19.4.2 分散式鎖的基本要求 298
19.5 CAP理論與分散式鎖模型 298
19.5.1 CAP理論 298
19.5.2 基於Redis的AP架構模型 299
19.5.3 基於Zookeeper的CP架構模型 299
19.5.4 AP架構模型的問題與解決方案 300
19.6 基於Redis實現分散式鎖 301
19.6.1 Redis命令分析 301
19.6.2 引入分散式鎖 302
19.6.3 引入try-finally代碼塊 303
19.6.4 引入Redis逾時機制 304
19.6.5 加鎖操作原子化 305
19.6.6 誤刪鎖分析 307
19.6.7 實現加鎖和解鎖歸一化 308
19.6.8 可重入性分析 309
19.6.9 解決可重入性問題 311
19.6.10 實現鎖的阻塞性 313
19.6.11 解決鎖失效問題 315
19.6.12 解鎖操作原子化 321
19.7 本章總結 322
第20章 深度解密秒殺系統架構 323
20.1 電商系統架構 323
20.2 秒殺系統的特點 326
20.2.1 秒殺系統的業務特點 326
20.2.2 秒殺系統的技術特點 327
20.3 秒殺系統的方案 328
20.3.1 秒殺系統的三個階段 328
20.3.2 秒殺系統的性能最佳化 329
20.4 秒殺系統設計 330
20.4.1 同步下單流程 330
20.4.2 異步下單流程 332
20.5 扣減庫存設計 336
20.5.1 下單減庫存 336
20.5.2 付款減庫存 337
20.5.3 預扣減庫存 337
20.5.4 扣減庫存問題的解決方案 337
20.5.5 秒殺系統扣減庫存方案 338
20.6 Redis助力秒殺系統 338
20.6.1 Redis實現扣減庫存 338
20.6.2 完美解決超賣問題 340
20.6.3 Redis分割庫存 341
20.6.4 快取穿透技術 342
20.7 伺服器性能最佳化 343
20.7.1 作業系統參數 343
20.7.2 最佳化套接字緩衝區 344
20.7.3 最佳化頻繁接收大檔案 345
20.7.4 最佳化TCP連線 346
20.8 本章總結 347

作者簡介

冰河,網際網路資深技術專家、MySQL 技術專家、分散式與微服務架構專家。

相關詞條

熱門詞條

聯絡我們