☆★☆★【高平行開發的天花板!】★☆★☆
在深度原理與專案實戰內一探究竟!高併發是高流量、高資料量服務線上系統架構必須具備的特性,如果想從微觀核心到併發應用,再到業務架構學習高併發的核心原理,以及高併發系統的工程架構最佳實踐,本書是中文書籍中最佳的範本,在細節部分,對核心排程、同步非同步、各類鎖的實現細節都有詳盡的敘述,另外在併發應用層面,對CAS問題、ABA問題、連接池實現,也有很完整的案例講解。在更高的架構層面上,對快取併發實戰、電子商務超賣問題、秒殺系統架構,更有清楚且應用上的說明,讓讀者能從CPU、作業系統、JVM底層原理為基礎,站在實踐的角度上全面了解高併發的基本原理及實用。在電腦多核心時代,併發程式設計是每個程式設計師都應掌握的技能,伺服器上的CPU核心在EPYC出後,成千上百個處理器同時為你工作,如果你寫出來的程式還無法執行多處理程序,多執行緒,多核心,小心真的成為時代的眼淚!
本書看點✪了解作業系統中的執行緒排程架構
✪多核心CPU上設計Java平行程式
✪併發式程式的設計理念,分工、同步、互斥
✪核心原理說明,原子性、可見性、有序性
✪Synchronized、AQS、CAS、鎖、執行緒池、ThreadLocal的核心原理
✪手動開發執行緒池實戰案例
✪使用CAS開發自旋鎖實戰案例
✪使用讀/寫鎖實戰快取
✪使用AQS實現可重入鎖
✪開發分散式鎖架構
✪完整大型實戰一個秒殺系統的完整架構
作者簡介:
冰河,互聯網資深技術專家、MySQL 技術專家、分散式與微服務架構專家。 多年來一直致力於分散式系統架構、微服務、分散式資料庫、分散式事務與大數據技術的研究,在高併發、高可用、高可擴充性、高可維護性和大數據等領域擁有豐富的架構經驗。 可視化多數據源數據異構中間件 mykit-data 作者,暢銷書《深入理解分散式事務:原理與實戰》《海量數據處理與大數據技術實戰》和《MySQL 技術大全:開發、優化與運維實戰》作者,“冰河技術”微信公眾號作者。
作者序
✤ 為什麼要寫這本書
隨著網際網路的不斷發展,CPU 硬體的核心數也在不斷提升,並行程式設計越來越普及,但是並行程式設計並不像其他業務那樣簡單明了。
在撰寫並行程式時,往往會出現各種各樣的Bug,這些Bug 常常以某種「詭異」的形式出現,然後迅速消失,並且在大部分場景下難以複現。所以,高並行程式設計著實是一項讓程式設計師頭疼的技術。
本書從實際需求出發,全面細緻地介紹了高並行程式設計的基礎知識、核心原理、實戰案例和系統架構等內容。每個章節都根據實際需要配有相關的原理圖和流程圖,在實戰案例篇,還會提供完整的實戰案例原始程式。書中的每個解決方案都經過高並行、大流量的生產環境的考驗,可以用於解決實際生產環境中的高並行問題。透過閱讀和學習本書,讀者可以更加全面、深入、透徹地理解高並行程式設計知識,提高對高並行程式設計問題的處理能力和專案實戰能力,並站在更高的層面解決高並行程式設計系統架構問題。
✤ 讀者對象
■網際網路從業人員。
■中高級開發人員。
■架構師。
■技術經理。
■技術專家。
■想轉行從事高並行程式設計的人員。
■需要系統學習高並行程式設計的開發人員。
■需要提高並行程式設計開發水準的人員。
■需要時常查閱高並行程式設計技術和開發案例的人員。
✤ 本書特色
1. 系統介紹高並行程式設計的知識
目前,圖書市場少有全面細緻地介紹有關高並行程式設計的基礎知識、核心原理、實戰案例和系統架構的圖書,多從其中一兩個角度入手講解。本書從以上四方面入手,全面、細緻並且層層遞進地介紹了高並行程式設計相關知識。
2. 大量圖解和開發案例
為了便於理解,筆者在高並行程式設計的基礎知識、核心原理和系統架構章節中配有大量的圖解和圖表,在實戰案例章節中配有完整的高並行程式設計案例。讀者按照本書的案例學習,並運行案例程式,能夠更加深入地理解和掌握相關知識。另外,這些案例程式和圖解的draw.io 原文件會一起收錄於隨書資料裡。讀者也可以造訪下面的連結,獲取完整的實戰案例原始程式和相關的隨書資料。
■GitHub:https://github.com/binghe001/mykit-concurrent-principle。
■Gitee:https://gitee.com/binghe001/mykit-concurrent-principle。
3. 案例應用性強
對於高並行程式設計的各項技術點,書中都配有相關的典型案例,具有很強的實用性,方便讀者隨時查閱和參考。
4. 具有較高的實用價值
書中大量的實戰案例來自筆者對實際工作的複習,尤其是實戰案例篇與系統架構篇涉及的內容,其中的完整案例稍加修改與完善便可應用於實際的生產環境中。
✤ 本書內容及知識系統
第1篇 基礎知識(第1~2章)
本篇簡單地介紹了作業系統執行緒排程的相關知識和並行程式設計的基礎知識。作業系統執行緒排程的知識包括馮• 諾依曼系統結構、CPU 架構、作業系統執行緒和Java 執行緒與作業系統執行緒的關係。並行程式設計的基礎知識包括並行程式設計的基本概念、並行程式設計的風險和並行程式設計中的鎖等。
第2篇 核心原理(第3~14章)
本篇使用大量的圖解詳細介紹了並行程式設計中各項技術的核心原理,涵蓋並行程式設計的三大核心問題、並行程式設計的本質問題、原子性的核心原理、可見性與有序性核心原理、synchronized 核心原理、AQS核心原理、Lock 鎖核心原理、CAS 核心原理、鎖死的核心原理、鎖最佳化、執行緒池核心原理和ThreadLocal 核心原理。
第3篇 實戰案例(第15~18章)
本篇在核心原理篇的基礎上,實現了4 個完整的實戰案例,包括手動開發執行緒池實戰、基於CAS 實現自旋鎖實戰、基於讀/ 寫鎖實現快取實戰和基於AQS 實現可重入鎖實戰。每個實戰案例都是核心原理篇的落地實現,掌握這4 個實戰案例的實現方式,有助我們更進一步地在實際專案中開發高並行程式。
第4篇 系統架構(第19~20章)
本篇以高並行、大流量場景下典型的分散式鎖架構和秒殺系統架構為例,深入剖析了分散式鎖和秒殺系統的架構細節,讓讀者能夠站在更高的架構層面來理解高並行程式設計。
✤ 如何閱讀本書
■對於沒有接觸過高並行程式設計或高並行程式設計技術薄弱的讀者,建議按照順序從第1 章開始閱讀,並實現書中的每一個案例。
■對於有一定多執行緒和並行程式設計基礎的讀者,可以根據自身實際情況,選擇性地閱讀相關篇章。
■對本書中涉及的高並行程式設計案例,讀者可以先自行思考其實現方式,再閱讀相關內容,可達到事半功倍的學習效果。
■可以先閱讀一遍書中的高並行程式設計案例,再閱讀各種技術對應的原理細節,理解會更加深刻。
✤ 勘誤和支援
由於作者的水準有限,撰寫時間倉促,書中難免會出現一些錯誤或不妥之處,懇請讀者批評指正。如果讀者對本書有任何建議或想法,請聯繫筆者。
電子郵件:1028386804@qq.com。
✤ 致謝
感謝蔣濤(CSDN 創始人、總裁)、鄒欣(CSDN 副總裁)、右軍(螞蟻金服資深技術專家)、季敏(阿里中介軟體分散式事務團隊負責人)、於雨(Dubbo-go 社區負責人)、張開濤(高德資深技術專家)、孫玄(奈學科技創始兼CEO、58 集團前技術委員會主席)、沈劍(網際網路架構專家、公眾號「架構師之路」作者)、程軍(餓了嗎前技術總監、公眾號「軍哥手記」作者)、李鵬雲(杭州任你說智慧科技CTO)、李偉(Apache RocketMQ 北京社區聯合發起人)、駱俊武(京東零售架構師)、Mr.K(「技術領導力」公眾號作者、某電子商務公司CTO)、「純潔的微笑(純潔的微笑」公眾號作者)、翟永超(公眾號「程式猿DD」維護人、《Spring Cloud 微服務實戰》作者)(以上排名不分先後)等行業大佬對本書的大力推薦。
感謝作者技術社區的兄弟姐妹們,感謝你們長期對社區的支援和貢獻。
你們的支援是我寫作的最大動力。
感謝我的團隊和許許多多一起合作、交流過的朋友們,感謝部落格、公眾號的粉絲,以及在我部落格、公眾號留言及鼓勵我的朋友們。
感謝電子工業出版社博文視點的張晶編輯,在這幾個月的時間中始終支援我寫作,你的鼓勵和幫助引導我順利完成全部書稿。
感謝我的家人,他們都在以自己的方式在我寫作期間默默地給予我支援與鼓勵,並時時刻刻為我灌輸著信心和力量!
最後,感謝所有支援、鼓勵和幫助過我的人。謹以此書獻給我最親愛的家人,以及許多關注、認可、支援、鼓勵和幫助過我的朋友們!
冰河
✤ 為什麼要寫這本書
隨著網際網路的不斷發展,CPU 硬體的核心數也在不斷提升,並行程式設計越來越普及,但是並行程式設計並不像其他業務那樣簡單明了。
在撰寫並行程式時,往往會出現各種各樣的Bug,這些Bug 常常以某種「詭異」的形式出現,然後迅速消失,並且在大部分場景下難以複現。所以,高並行程式設計著實是一項讓程式設計師頭疼的技術。
本書從實際需求出發,全面細緻地介紹了高並行程式設計的基礎知識、核心原理、實戰案例和系統架構等內容。每個章節都根據實際需要配有相關的原理圖和流程圖,在實戰案例篇,還會提供完整的實戰...
目錄
第1篇 基礎知識
01 作業系統執行緒排程
1.1 馮• 諾依曼系統結構
1.2 CPU 架構
1.3 作業系統執行緒
1.4 Java 執行緒與作業系統執行緒的關係
1.5 本章複習
02 並行程式設計概述
2.1 並行程式設計的基本概念
2.2 並行程式設計的風險
2.3 並行程式設計中的鎖
2.4 本章複習
第2篇 核心原理
03 並行程式設計的三大核心問題
3.1 分工問題
3.2 同步問題
3.3 互斥問題
3.4 本章複習
04 並行程式設計的本質問題
4.1 電腦的核心矛盾
4.2 原子性
4.3 可見性
4.4 有序性
4.5 解決方案
4.6 本章複習
05 原子性的核心原理
5.1 原子性原理
5.2 處理器保證原子性
5.3 互斥鎖保證原子性
5.4 CAS 保證原子性
5.5 本章複習
06 可見性與有序性核心原理
6.1 CPU 多級快取架構
6.2 快取一致性
6.3 錯誤分享
6.4 volatile 核心原理
6.5 記憶體屏障
6.6 Java 記憶體模型
6.7 Happens-Before 原則
6.8 本章複習
07 synchronized 核心原理
7.1 synchronized 用法
7.2 Java 物件結構
7.3 Java 物件標頭
7.4 使用JOL 查看物件資訊
7.5 synchronized 核心原理
7.6 偏向鎖
7.7 輕量級鎖
7.8 重量級鎖
7.9 鎖升級的過程
7.10 鎖消除
7.11 本章複習
08 AQS 核心原理
8.1 AQS 核心資料結構
8.2 AQS 底層鎖的支援
8.3 本章複習
09 Lock 鎖核心原理
9.1 顯示鎖
9.2 公平鎖與非公平鎖
9.3 悲觀鎖與樂觀鎖
9.4 可中斷鎖與不可中斷鎖
9.5 排他鎖與共享鎖
9.6 可重入鎖
9.7 讀/ 寫鎖
9.8 LockSupport
9.9 本章複習
10 CAS 核心原理
10.1 CAS 的基本概念
10.2 CAS 的核心類別Unsafe
10.3 使用CAS 實現count++
10.4 ABA 問題
10.5 本章複習
11 鎖死的核心原理
11.1 鎖死的基本概念
11.2 鎖死的分析
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.2 執行緒池的建立方式
13.3 執行緒池執行任務的核心流程
13.4 執行緒池的關閉方式
13.5 如何確定最佳執行緒數
13.6 本章複習
14 ThreadLocal 核心原理
14.1 ThreadLocal 的基本概念
14.2 ThreadLocal 的使用案例
14.3 ThreadLocal 的核心原理
14.4 ThreadLocal 變數的不繼承性
14.5 InheritableThreadLocal 的使用案例
14.6 InheritableThreadLocal 的核心原理
14.7 本章複習
第3篇 實戰案例
15 手動開發執行緒池實戰
15.1 案例概述
15.2 專案架設
15.3 核心類別實現
15.4 測試程式
15.5 本章複習
16 基於CAS 實現自旋鎖實戰
16.1 案例概述
16.2 專案架設
16.3 核心類別實現
16.4 測試程式
16.5 本章複習
17 基於讀/ 寫鎖實現快取實戰
17.1 案例概述
17.2 專案架設
17.3 核心類別實現
17.4 測試程式
17.5 本章複習
18 基於AQS 實現可重入鎖實戰
18.1 案例概述
18.2 專案架設
18.3 核心類別實現
18.4 測試程式
18.5 本章複習
第4篇 系統架構
19 深度解密分散式鎖架構
19.1 鎖解決的本質問題
19.2 電子商務超賣問題
19.3 JVM 提供的鎖
19.4 分散式鎖
19.5 CAP 理論與分散式鎖模型
19.6 基於Redis 實現分散式鎖
19.7 本章複習
20 深度解密秒殺系統架構
20.1 電子商務系統架構
20.2 秒殺系統的特點
20.3 秒殺系統的方案
20.4 秒殺系統設計
20.5 扣減庫存設計
20.6 Redis 助力秒殺系統
20.7 伺服器性能最佳化
20.8 本章複習
第1篇 基礎知識
01 作業系統執行緒排程
1.1 馮• 諾依曼系統結構
1.2 CPU 架構
1.3 作業系統執行緒
1.4 Java 執行緒與作業系統執行緒的關係
1.5 本章複習
02 並行程式設計概述
2.1 並行程式設計的基本概念
2.2 並行程式設計的風險
2.3 並行程式設計中的鎖
2.4 本章複習
第2篇 核心原理
03 並行程式設計的三大核心問題
3.1 分工問題
3.2 同步問題
3.3 互斥問題
3.4 本章複習
04 並行程式設計的本質問題
4.1 電腦的核心矛盾
4.2 原子性
4.3 可見性
4.4 有序性
4.5 解決方案
4.6 本章複習
05 原子性的核心...