多核心 CPU 加速程式 32倍 - 深入高平行開發深度原理及專案實戰, 2/e
冰河 著
- 出版商: 深智
- 出版日期: 2025-05-19
- 定價: $880
- 售價: 7.9 折 $695
- 語言: 繁體中文
- 頁數: 512
- ISBN: 6267569802
- ISBN-13: 9786267569801
- 此書翻譯自: 深入理解高並發編程:核心原理與案例實戰
尚未上市,歡迎預購
相關主題
商品描述
\\好評再版//
☆先了解作業系統中的執行緒排程架構
☆多核心CPU上設計Java平行程式
☆併發式程式的設計理念,分工、同步、互斥
☆核心原理說明,原子性、可見性、有序性
Synchronized、AQS、CAS、鎖、執行緒池、ThreadLocal的核心原理
☆手動開發執行緒池實戰案例
☆使用CAS開發自旋鎖實戰案例
☆使用讀/寫鎖實戰快取
☆使用AQS實現可重入鎖
☆開發分散式鎖架構
☆完整大型實戰一個秒殺系統的完整架構
【內容簡介】
高併發是高流量、高資料量服務線上系統架構必須具備的特性,如果想從微觀核心到併發應用,再到業務架構學習高併發的核心原理,以及高併發系統的工程架構最佳實踐,本書是中文書籍中最佳的範本,在細節部分,對核心排程、同步非同步、各類鎖的實現細節都有詳盡的敘述,另外在在併發應用層面,對CAS問題、ABA問題、連接池實現,也有很完整的案例講解。在更高的架構層面上,對快取併發實戰、電子商務超賣問題、秒殺系統架構,更有清楚且應用上的說明,讓讀者能從CPU、作業系統、JVM底層原理為基礎,站在實踐的角度上全面了解高併發的基本原理及實用。在電腦多核心時代,併發程式設計是每個程式設計師都應掌握的技能,伺服器上的CPU核心在EPYC出後,成千上百個處理器同時為你工作,如果你寫出來的程式還無法執行多處理程序,多執行緒,多核心,小心真的成為時代的眼淚!
作者簡介
冰河
互聯網資深技術專家、MySQL 技術專家、分散式與微服務架構專家。 多年來一直致力於分散式系統架構、微服務、分散式資料庫、分散式事務與大數據技術的研究,在高併發、高可用、高可擴充性、高可維護性和大數據等領域擁有豐富的架構經驗。 可視化多數據源數據異構中間件 mykit-data 作者,暢銷書《深入理解分散式事務:原理與實戰》《海量數據處理與大數據技術實戰》和《MySQL 技術大全:開發、優化與運維實戰》作者,“冰河技術”微信公眾號作者。
目錄大綱
第1篇 基礎知識
01 作業系統執行緒排程
▌1.1 馮· 諾依曼系統結構
1.1.1 概述
1.1.2 電腦五大組成部分
▌1.2 CPU 架構
1.2.1 CPU 的組成部分
1.2.2 CPU 邏輯結構
1.2.3 單核心CPU 的不足
1.2.4 多核心CPU 架構
1.2.5 多CPU 架構
▌1.3 作業系統執行緒
1.3.1 使用者級執行緒
1.3.2 核心級執行緒
1.3.3 混合級執行緒
▌1.4 Java 執行緒與作業系統執行緒的關係
▌1.5 本章複習
02 並行程式設計概述
▌2.1 並行程式設計的基本概念
2.1.1 程式
2.1.2 處理程序與執行緒
2.1.3 執行緒組
2.1.4 使用者執行緒與守護執行緒
2.1.5 並行與並行
2.1.6 同步與非同步
2.1.7 共享與獨享
2.1.8 臨界區
2.1.9 阻塞與非阻塞
▌2.2 並行程式設計的風險
2.2.1 安全性問題
2.2.2 活躍性問題
2.2.3 性能問題
▌2.3 並行程式設計中的鎖
2.3.1 悲觀鎖與樂觀鎖
2.3.2 公平鎖與非公平鎖
2.3.3 獨佔鎖與共享鎖
2.3.4 可重入鎖與不可重入鎖
2.3.5 可中斷鎖與不可中斷鎖
2.3.6 讀/ 寫鎖
2.3.7 自旋鎖
2.3.8 鎖死、饑餓與活鎖
▌2.4 本章複習
第2篇 核心原理
03 並行程式設計的三大核心問題
▌3.1 分工問題
3.1.1 模擬現實案例
3.1.2 並行程式設計中的分工
▌3.2 同步問題
3.2.1 模擬現實案例
3.2.2 並行程式設計中的同步
▌3.3 互斥問題
3.3.1 模擬現實案例
3.3.2 並行程式設計中的互斥
▌3.4 本章複習
04 並行程式設計的本質問題
▌4.1 電腦的核心矛盾
4.1.1 核心矛盾概述
4.1.2 CPU 如何解決核心矛盾
4.1.3 作業系統如何解決核心矛盾
4.1.4 編譯器如何解決核心矛盾
4.1.5 引發的問題
▌4.2 原子性
4.2.1 原子性概述
4.2.2 原子性問題
4.2.3 Java 中的原子性問題
4.2.4 原子性問題複習
▌4.3 可見性
4.3.1 可見性概述
4.3.2 可見性問題
4.3.3 Java 中的可見性問題
4.3.4 可見性問題複習
▌4.4 有序性
4.4.1 有序性概述
4.4.2 有序性問題
4.4.3 Java 中的有序性問題
4.4.4 有序性問題複習
▌4.5 解決方案
4.5.1 原子性問題解決方案
4.5.2 可見性與有序性問題解決方案
▌4.6 本章複習
05 原子性的核心原理
▌5.1 原子性原理
▌5.2 處理器保證原子性
5.2.1 CPU 保證基本記憶體操作的原子性
5.2.2 匯流排鎖保證原子性
5.2.3 快取鎖保證原子性
▌5.3 互斥鎖保證原子性
5.3.1 互斥鎖模型
5.3.2 最佳化後的互斥鎖模型
▌5.4 CAS 保證原子性
▌5.5 本章複習
06 可見性與有序性核心原理
▌6.1 CPU 多級快取架構
6.1.1 CPU 為何使用多級快取架構
6.1.2 CPU 多級快取架構原理
6.1.3 CPU 的計算流程
▌6.2 快取一致性
6.2.1 什麼是快取一致性
6.2.2 快取一致性協定
6.2.3 MESI 協定快取狀態
6.2.4 MESI 協定的狀態轉換
6.2.5 MESI 協定帶來的問題
▌6.3 錯誤分享
6.3.1 錯誤分享的概念
6.3.2 錯誤分享產生的場景
6.3.3 如何解決錯誤分享問題
▌6.4 volatile 核心原理
6.4.1 保證可見性核心原理
6.4.2 保證有序性核心原理
6.4.3 volatile 的局限性
▌6.5 記憶體屏障
6.5.1 編譯器重排序
6.5.2 CPU 重排序
6.5.3 as-if-serial 原則
6.5.4 電腦硬體實現的記憶體屏障
▌6.6 Java 記憶體模型
6.6.1 Java 記憶體模型的概念
6.6.2 Java 記憶體模型的八大操作
6.6.3 Java 記憶體模型解決可見性與有序性問題
▌6.7 Happens-Before 原則
6.7.1 Happens-Before 原則概述
6.7.2 程式次序原則
6.7.3 volatile 變數原則
6.7.4 傳遞原則
6.7.5 鎖定原則
6.7.6 執行緒啟動原則
6.7.7 執行緒終結原則
6.7.8 執行緒中斷原則
6.7.9 物件終結原則
▌6.8 本章複習
07 synchronized 核心原理
▌7.1 synchronized 用法
7.1.1 同步實例方法
7.1.2 同步靜態方法
7.1.3 同步程式區塊
▌7.2 Java 物件結構
7.2.1 物件結構總覽
7.2.2 物件標頭
7.2.3 實例資料
7.2.4 對齊填充
▌7.3 Java 物件標頭
7.3.1 Mark Word
7.3.2 類型指標
7.3.3 陣列長度
▌7.4 使用JOL 查看物件資訊
7.4.1 引入JOL 環境依賴
7.4.2 列印物件資訊
7.4.3 列印物件鎖狀態
▌7.5 synchronized 核心原理
7.5.1 synchronized 底層原理
7.5.2 Monitor 鎖原理
7.5.3 反編譯synchronized方法
7.5.4 反編譯synchronized程式區塊
▌7.6 偏向鎖
7.6.1 偏向鎖核心原理
7.6.2 偏向鎖的撤銷
7.6.3 偏向鎖案例
▌7.7 輕量級鎖
7.7.1 輕量級鎖核心原理
7.7.2 輕量級鎖案例
▌7.8 重量級鎖
7.8.1 重量級鎖核心原理
7.8.2 重量級鎖案例
▌7.9 鎖升級的過程
▌7.10 鎖消除
▌7.11 本章複習
08 AQS 核心原理
▌8.1 AQS 核心資料結構
8.1.1 AQS 資料結構原理
8.1.2 AQS 內部佇列模式
▌8.2 AQS 底層鎖的支援
8.2.1 核心狀態位元
8.2.2 核心節點類別
8.2.3 獨佔鎖模式
8.2.4 共享鎖模式
▌8.3 本章複習
09 Lock 鎖核心原理
▌9.1 顯示鎖
▌9.2 公平鎖與非公平鎖
9.2.1 公平鎖原理
9.2.2 ReentrantLock 中的公平鎖
9.2.3 公平鎖實戰
9.2.4 非公平鎖原理
9.2.5 ReentrantLock 中的非公平鎖
9.2.6 非公平鎖實戰
▌9.3 悲觀鎖與樂觀鎖
9.3.1 悲觀鎖原理
9.3.2 悲觀鎖實戰
9.3.3 樂觀鎖原理
9.3.4 樂觀鎖實戰
▌9.4 可中斷鎖與不可中斷鎖
9.4.1 可中斷鎖原理
9.4.2 可中斷鎖實戰
9.4.3 不可中斷鎖原理
9.4.4 不可中斷鎖實戰
▌9.5 排他鎖與共享鎖
9.5.1 排他鎖原理
9.5.2 排他鎖實戰
9.5.3 共享鎖原理
9.5.4 共享鎖實戰
▌9.6 可重入鎖
9.6.1 可重入鎖原理
9.6.2 可重入鎖實戰
▌9.7 讀/ 寫鎖
9.7.1 讀/ 寫鎖原理
9.7.2 ReadWriteLock 讀/寫鎖
9.7.3 ReadWriteLock 鎖降級
9.7.4 StampedLock 讀/寫鎖
9.7.5 StampedLock 鎖的升級與降級
9.7.6 讀/ 寫鎖實戰
▌9.8 LockSupport
9.8.1 LockSupport 原理
9.8.2 LockSupport 實戰
▌9.9 本章複習
10 CAS 核心原理
▌10.1 CAS 的基本概念
▌10.2 CAS 的核心類別Unsafe
10.2.1 Unsafe 類別的核心方法
10.2.2 Unsafe 類別實戰
▌10.3 使用CAS 實現count++
10.3.1 案例分析
10.3.2 程式實現
10.3.3 測試程式
▌10.4 ABA 問題
10.4.1 ABA 問題概述
10.4.2 ABA 問題解決方案
10.4.3 Java 如何解決ABA問題
▌10.5 本章複習
11 鎖死的核心原理
▌11.1 鎖死的基本概念
▌11.2 鎖死的分析
11.2.1 執行緒不安全
11.2.2 串列執行
11.2.3 發生鎖死
▌11.3 形成鎖死的必要條件
▌11.4 鎖死的預防
▌11.5 本章複習
12 鎖最佳化
▌12.1 縮小鎖的範圍
▌12.2 減小鎖的細微性
▌12.3 鎖分離
▌12.4 鎖分段
▌12.5 鎖粗化
▌12.6 避免熱點區域問題
▌12.7 獨佔鎖的替換方案
▌12.8 其他最佳化方案
▌12.9 本章複習
13 執行緒池核心原理
▌13.1 執行緒池的核心狀態
13.1.1 核心狀態說明
13.1.2 核心狀態的流轉過程
▌13.2 執行緒池的建立方式
13.2.1 透過Executors 類別建立執行緒池
13.2.2 透過ThreadPoolExecutor類別建立執行緒池
13.2.3 透過ForkJoinPool類別建立執行緒池
13.2.4 透過ScheduledThreadPoolExecutor 類別建立執行緒池
▌13.3 執行緒池執行任務的核心流程
13.3.1 執行任務的流程
13.3.2 拒絕策略
▌13.4 執行緒池的關閉方式
13.4.1 shutdown() 方法
13.4.2 shutdownNow() 方法
▌13.5 如何確定最佳執行緒數
13.5.1 CPU 密集型程式
13.5.2 I/O 密集型程式
▌13.6 本章複習
14 ThreadLocal 核心原理
▌14.1 ThreadLocal 的基本概念
▌14.2 ThreadLocal 的使用案例
▌14.3 ThreadLocal 的核心原理
14.3.1 Thread 類別原始程式
14.3.2 set() 方法
14.3.3 get() 方法
14.3.4 remove() 方法
▌14.4 ThreadLocal 變數的不繼承性
▌14.5 InheritableThreadLocal 的使用案例
▌14.6 InheritableThreadLocal 的核心原理
▌14.7 本章複習
第3篇 實戰案例
15 手動開發執行緒池實戰
▌15.1 案例概述
▌15.2 專案架設
▌15.3 核心類別實現
15.3.1 定義核心欄位
15.3.2 建立內部類別WorkThread
15.3.3 建立執行緒池的建構方法
15.3.4 建立執行任務的方法
15.3.5 建立關閉執行緒池的方法
15.3.6 完整原始程式碼範例
▌15.4 測試程式
▌15.5 本章複習
16 基於CAS 實現自旋鎖實戰
▌16.1 案例概述
▌16.2 專案架設
▌16.3 核心類別實現
16.3.1 CasLock 介面實現
16.3.2 MyCasLock 類別實現
▌16.4 測試程式
▌16.5 本章複習
17 基於讀/ 寫鎖實現快取實戰
▌17.1 案例概述
▌17.2 專案架設
▌17.3 核心類別實現
17.3.1 ReadWriteCache<K, V>核心介面的實現
17.3.2 ConcurrentReadWriteCache<K, V> 核心類別的實現
▌17.4 測試程式
▌17.5 本章複習
18 基於AQS 實現可重入鎖實戰
▌18.1 案例概述
▌18.2 專案架設
▌18.3 核心類別實現
18.3.1 AQSSync 內部類別的實現
18.3.2 ReentrantAQSLock 核心類別的實現
18.3.3 完整原始程式碼
▌18.4 測試程式
▌18.5 本章複習
第4篇 系統架構
19 深度解密分散式鎖架構
▌19.1 鎖解決的本質問題
▌19.2 電子商務超賣問題
19.2.1 超賣問題概述
19.2.2 超賣問題案例
▌19.3 JVM 提供的鎖
19.3.1 JVM 鎖的原理
19.3.2 JVM 鎖的不足
▌19.4 分散式鎖
19.4.1 分散式鎖的實現方法
19.4.2 分散式鎖的基本要求
▌19.5 CAP 理論與分散式鎖模型
19.5.1 CAP 理論
19.5.2 基於Redis 的AP 架構模型
19.5.3 基於Zookeeper 的CP架構模型
19.5.4 AP 架構模型的問題與解決方案
▌19.6 基於Redis 實現分散式鎖
19.6.1 Redis 命令分析
19.6.2 引入分散式鎖
19.6.3 引入try-finally 程式區塊
19.6.4 引入Redis 逾時機制
19.6.5 加鎖操作原子化
19.6.6 誤刪鎖分析
19.6.7 實現加鎖和解鎖歸一化
19.6.8 可重入性分析
19.6.9 解決可重入性問題
19.6.10 實現鎖的阻塞性
19.6.11 解決鎖故障問題
19.6.12 解鎖操作原子化
▌19.7 本章複習
20 深度解密秒殺系統架構
▌20.1 電子商務系統架構
▌20.2 秒殺系統的特點
20.2.1 秒殺系統的業務特點
20.2.2 秒殺系統的技術特點
▌20.3 秒殺系統的方案
20.3.1 秒殺系統的三個階段
20.3.2 秒殺系統的性能最佳化
▌20.4 秒殺系統設計
20.4.1 同步下單流程
20.4.2 非同步下單流程
▌20.5 扣減庫存設計
20.5.1 下單減庫存
20.5.2 付款減庫存
20.5.3 預扣減庫存
20.5.4 扣減庫存問題的解決方案
20.5.5 秒殺系統扣減庫存方案
▌20.6 Redis 助力秒殺系統
20.6.1 Redis 實現扣減庫存
20.6.2 完美解決超賣問題
20.6.3 Redis 分割庫存
20.6.4 快取穿透技術
▌20.7 伺服器性能最佳化
20.7.1 作業系統參數
20.7.2 最佳化通訊端緩衝區
20.7.3 最佳化頻繁接收大檔案
20.7.4 最佳化TCP 連接
▌20.8 本章複習