發表於2024-11-18
《深入理解並行編程》首先以霍金提齣的兩個理論物理限製為引子,解釋瞭多核並行計算興起的原因,並從硬件的角度闡述並行編程的難題。接著,《深入理解並行編程》以常見的計數器為例,探討其不同的實現方法及適用場景。在這些實現方法中,除瞭介紹常見的鎖以外,《深入理解並行編程》還重點介紹瞭RCU的使用及其原理,以及實現RCU的基礎:內存屏障。最後,《深入理解並行編程》還介紹瞭並行軟件的驗證,以及並行實時計算等內容。
《深入理解並行編程》適閤於對並行編程有興趣的大學生、研究生,以及需要對項目進行深度性能優化的軟硬件工程師,特彆值得一提的是,《深入理解並行編程》對操作係統內核工程師也很有價值。
在我所看過的各種關於操作係統概念和並行編程的書籍中,我對Paul的書評價至高,它不是對學術方法的簡單羅列,而是對現代硬件上運行並行係統的各種現實世界問題和麵臨挑戰的細緻分析,這一切都源於Paul在這一領域的豐富經驗和巨大的貢獻。
——OpersysCEO,《EmbeddedAndroid》作者KarimYaghmour
並行編程很難,但閱讀Paul的書是掌握並行編程至簡單的(當然也是至有趣的)辦法之一!
——Linux內核x86、sched和rt-patches分支的維護者IngoMolnar
編程的至高無上境界是毫不費力地馴服CPU。你正在閱讀的是關於各任務在CPU進行戰爭的偉大著作,一旦你開始翻閱,再多的編程挑戰也不用怕!
——Linux內核防火牆ipchains和iptables的作者,網絡貨幣prettycoin的作者RustyRussell
對程序員而言,想要瞭解並行編程中涉及的問題,以及如何正確解決這些問題,本書是不可或缺的。
——《Linux內核驅動》作者,Linux內核stable分支和其他大量分支的維護者GregKroah-Hartman
這是一本每個並行編程專業人員案頭必備的參考書,濃縮瞭作者在該領域數十年的豐富實踐經驗。它也是一本學習並行編程的優秀教材,在涵蓋主題的廣度和深度方麵錶現優異。極具吸引力的寫作風格使得本書的閱讀成為非常愉快的體驗。
——Facebook資深工程師,危險指針和無鎖內存分配器的發明者MagedM.Micheal
Linux內核社區裏高手雲集,並且裏麵的人經常個性鮮明,以至於有很多人認為內核社區很不友好。但Paul是一個特彆親切、友善和耐心的人,不管是在內核郵件列錶裏還是麵對麵交流時。而這本書也體現瞭Paul的這些品質,他以至詳盡易懂的方式解釋並行編程方方麵麵的知識。這不錶示這本書看起來很輕鬆,因為並行編程本身就很難。但真正有用的知識大概都沒能夠輕鬆獲得。
——Linux內核cgroups和cpuset分支的維護者,華為Linux內核高級工程師李澤帆
剛看到書名時我在想,並行編程這樣一個在計算機領域“古老”且成熟的話題還有什麼值得多寫的。翻看幾頁目錄後便改變瞭想法。
該書從並行編程問題的曆史背景講起,一步步引入問題的挑戰並帶讀者遊曆硬件與軟件交互的發展,至後闡述當下並行編程的復雜性。
本書囊括所有係統編程的要素,不僅僅是概念層麵的解釋,更重要的是深入分析瞭每個要素存在的必要性及底層原理。對於喜歡鑽研的同學或是在業界工作的工程師甚至架構師都是非常好的學習資源。
盡管我在業界有多年的開發設計經驗,依然從書中學到很多實用的知識。作者PaulE.McKenney用深入淺齣地方式將自己在並行編程領域數十年的經驗歸納在這五百多頁中。譯者謝寶友和魯陽在係統編程上有著紮實的功底,用流暢的語言將本書翻譯給廣大國內讀者。這是一本難得的技術好書!
——VoltDB研發部總監石寜
並行編程並沒有那麼難,如果你花點時間在這本書和它裏麵的小問題上的話。
——Linux內核RCU代碼貢獻者馮博群
Paul是Linux瞭不起的黑客,也是Linux社區RCU模塊的領導者和維護者。他的著作《IsParallelProgrammingHardAndIfSoWhatCanYouDoAboutIt?》首版在9年前就發布瞭。本書主要陳述瞭在適應多核硬件下提升並行軟件的擴展性,避免由於鎖競爭所引起的産品性能急劇下降,以及開展多核係統的設計、優化工作。
Paul所維護的RCU模塊在Linuxkernel各個子係統中被大量應用,是保障kernel擴展性的基礎技術,沒有RCU就沒有Linux現在優秀的多核性能和擴展性;在並行計算方麵,Paul對於鎖、RCU、SMP、NUMA、內存屏障等並行技術有深刻的瞭解,兼具近20年解決問題的實踐經驗。中興同仁翻譯此書,對於提升我國開源係統軟件的設計水平和開發高端産品,均有重大意義。
——中國開源軟件推進聯盟主席陸首群
寶友的“自學成纔”路徑一直很讓我印象深刻,貢獻及收獲在中興這樣一個正規軍遍布的大型通訊上市企業,並通過一年的努力幫助中興在開源社區提升代碼貢獻率和質量,又再次讓我竪起大拇指!不忘初心的工程師夢想、學術上的堅持,以及職業生涯中的成就,寶友身上的這些閃光的品質都是懷揣夢想的年輕一代工程師們學習的榜樣。
——Linaro全球執行副總裁大中華區總經理郭晶
在多核處理器已經成為主流計算架構的今天,理解和掌握並行編程技術,對於相關軟件開發人員來說至關重要。《深入理解並行編程》一書係統講述瞭並行計算的要點和難點,堪稱經典,是入門和學習並行編程的不二推薦。
——LinuxIMX平颱維護者ShawnGuo
這本書舉重若輕地將並行編程涉及的軟、硬件各個方麵的基本原理透徹地呈現在讀者麵前,相信讀者研讀和實踐後可以對並行編程有皰丁解牛之感。
——Linaro資深內核工程師聶軍
《深入理解並行編程》全方麵講述瞭高速緩存、內存屏障、鎖、RCU、並發性、實時性等知識,如同少林寺的“洗髓經”,是邁嚮“武林高手”的必修內功,值得對並行編程感興趣的計算機從業者、尤其是操作係統底層軟件從業者細讀。
——RedHat資深Linux內核工程師龐訓磊
並行編程一直是程序設計的難題,這個難題來源於硬件係統,也來源於人類本身的思維模式。人類的思考模式是綫性的,很難做到一心二用,很難在程序設計的過程中自如處理並行化的算法和結構。
此外,並行編程的作用越來越大,AI的湧現和大數據對計算量的要求導緻GPU、FPGA及ASIC之類異構計算的興起。這些異構計算都以並行計算為根基,並行計算很可能成為計算領域的下一個風口。
本書探討瞭並行計算的根源。從硬件、鎖機製、數據分割和RCU等多個方麵,對並行計算的本質和如何應用做瞭很多分析工作,對讀者理解並行計算和提高對並行計算的掌控力有很大的幫助。
——騰訊高級技術專傢高劍林
第1章 如何使用本書1
1.1 路綫圖1
1.2 小問題2
1.3除本書之外的選擇3
1.4 示例源代碼4
1.5 這本書屬於誰4
第2章 簡介6
2.1 導緻並行編程睏難的曆史原因6
2.2 並行編程的目標7
2.2.1 性能8
2.2.2 生産率9
2.2.3 通用性9
2.3 並行編程的替代方案11
2.3.1 串行應用的多個實例11
2.3.2 使用現有的並行軟件11
2.3.3 性能優化12
2.4 是什麼使並行編程變得復雜12
2.4.1 分割任務13
2.4.2 並行訪問控製13
2.4.3 資源分割和復製14
2.4.4 與硬件的交互14
2.4.5 組閤使用14
2.4.6 語言和環境如何支持這些任務14
2.5 本章的討論15
第3章 硬件和它的習慣16
3.1 概述16
3.1.1 流水綫CPU16
3.1.2 內存引用17
3.1.3 原子操作18
3.1.4 內存屏障19
3.1.5 高速緩存未命中19
3.1.6 I/O操作19
3.2 開銷20
3.2.1 硬件體係結構20
3.2.2 操作的開銷21
3.3 硬件的免費午餐23
3.3.1 3D集成23
3.3.2 新材料和新工藝24
3.3.3 是光,不是電子24
3.3.4 專用加速器24
3.3.5 現有的並行軟件25
3.4 對軟件設計的啓示25
第4章 辦事的傢夥27
4.1 腳本語言27
4.2 POSIX多進程28
4.2.1 POSIX進程創建和銷毀28
4.2.2 POSIX綫程創建和銷毀30
4.2.3 POSIX鎖31
4.2.4 POSIX讀/寫鎖34
4.3 原子操作37
4.4 Linux內核中類似POSIX的操作38
4.5 如何選擇趁手的工具39
第5章 計數40
5.1 為什麼並發計數不可小看41
5.2 統計計數器42
5.2.1 設計43
5.2.2 基於數組的實現43
5.2.3 最終結果一緻的實現44
5.2.4 基於每綫程變量的實現46
5.2.5 本節討論48
5.3 近似上限計數器48
5.3.1 設計48
5.3.2 簡單的上限計數實現50
5.3.3 關於簡單上限計數的討論55
5.3.4 近似上限計數器的實現55
5.3.5 關於近似上限計數器的討論55
5.4 精確上限計數56
5.4.1 原子上限計數的實現56
5.4.2 關於原子上限計數的討論62
5.4.3 Signal-Theft上限計數的設計62
5.4.4 Signal-Theft上限計數的實現63
5.4.5 關於Signal-Theft上限計數的討論68
5.5 特殊場閤的並行計數68
5.6 關於並行計數的討論69
5.6.1 並行計數的性能70
5.6.2 並行計數的專門化71
5.6.3 從並行計數中學到什麼71
第6章 對分割和同步的設計73
6.1 分割練習73
6.1.1 哲學傢就餐問題73
6.1.2 雙端隊列75
6.1.3 關於分割問題示例的討論81
6.2 設計準則82
6.3 同步粒度83
6.3.1 串行程序84
6.3.2 代碼鎖85
6.3.3 數據鎖86
6.3.4 數據所有權88
6.3.5 鎖粒度與性能88
6.4 並行快速路徑90
6.4.1 讀/寫鎖91
6.4.2 層次鎖91
6.4.3 資源分配器緩存92
6.5 分割之外97
6.5.1 使用工作隊列的迷宮問題並行解法97
6.5.2 另一種迷宮問題的並行解法100
6.5.3 性能比較I102
6.5.4 另一種迷宮問題的串行解法104
6.5.5 性能比較II104
6.5.6 未來展望與本節總結105
6.6 分割、並行化與優化106
第7章 鎖107
7.1 努力活著108
7.1.1 死鎖108
7.1.2 活鎖與飢餓114
7.1.3 不公平的鎖116
7.1.4 低效率的鎖117
7.2 鎖的類型117
7.2.1 互斥鎖117
7.2.2 讀/寫鎖118
7.2.3 讀/寫鎖之外118
7.2.4 範圍鎖119
7.3 鎖在實現中的問題121
7.3.1 基於原子交換的互斥鎖實現示例121
7.3.2 互斥鎖的其他實現122
7.4 基於鎖的存在保證124
7.5 鎖:是英雄還是惡棍125
7.5.1 應用程序中的鎖:英雄125
7.5.2 並行庫中的鎖:隻是一個工具126
7.5.3 並行化串行庫時的鎖:惡棍128
7.6 總結130
第8章 數據所有權131
8.1 多進程131
8.2 部分數據所有權和pthread綫程庫132
8.3 函數輸送132
8.4 指派綫程132
8.5 私有化133
8.6 數據所有權的其他用途133
第9章 延後處理134
9.1 引用計數134
9.1.1 各種引用計數的實現135
9.1.2 危險指針140
9.1.3 支持引用計數的Linux原語141
9.1.4 計數優化142
9.2 順序鎖142
9.3 讀-復製-修改(RCU)145
9.3.1 RCU介紹145
9.3.2 RCU基礎147
9.3.3 RCU用法155
9.3.4 Linux內核中的RCU API166
9.3.5 “玩具式”的RCU實現171
9.3.6 RCU練習188
9.4 如何選擇?188
9.5 更新端怎麼辦190
第10章 數據結構191
10.1 從例子入手191
10.2 可分割的數據結構192
10.2.1 哈希錶的設計192
10.2.2 哈希錶的實現192
10.2.3 哈希錶的性能195
10.3 讀側重的數據結構197
10.3.1 受RCU保護的哈希錶的實現197
10.3.2 受RCU保護的哈希錶的性能199
10.3.3 對受RCU保護的哈希錶的討論201
10.4 不可分割的數據結構201
10.4.1 可擴展哈希錶的設計202
10.4.2 可擴展哈希錶的實現203
10.4.3 可擴展哈希錶的討論210
10.4.4 其他可擴展的哈希錶211
10.5 其他數據結構214
10.6 微優化214
10.6.1 實例化215
10.6.2 比特與字節215
10.6.3 硬件層麵的考慮216
10.7 總結217
第11章 驗證218
11.1 簡介218
11.1.1 BUG來自於何處218
11.1.2 所需的心態220
11.1.3 應該何時開始驗證221
11.1.4 開源之路221
11.2 跟蹤222
11.3 斷言223
11.4 靜態分析224
11.5 代碼走查224
11.5.1 審查224
11.5.2 走查225
11.5.3 自查225
11.6 幾率及海森堡BUG227
11.6.1 離散測試統計228
11.6.2 濫用離散測試統計229
11.6.3 持續測試統計229
11.6.4 定位海森堡BUG232
11.7 性能評估235
11.7.1 性能基準236
11.7.2 剖析236
11.7.3 差分分析237
11.7.4 微基準237
11.7.5 隔離237
11.7.6 檢測乾擾238
11.8 總結242
第12章 形式驗證244
12.1 通用目的的狀態空間搜索244
12.1.1 Promela和Spin244
12.1.2 如何使用 Promela249
12.1.3 Promela 示例: 鎖251
12.1.4 Promela 示例: QRCU254
12.1.5 Promela初試牛刀:dynticks和可搶占RCU260
12.1.6 驗證可搶占RCU和dynticks264
12.2 特定目的的狀態空間搜索288
12.2.1 解析Litmus測試289
12.2.2 Litmus測試意味著什麼290
12.2.3 運行Litmus測試291
12.2.4 PPCMEM討論292
12.3 公理方法293
12.4 SAT求解器294
12.5 總結295
第13章 綜閤應用296
13.1 計數難題296
13.1.1 對更新進行計數296
13.1.2 對查找進行計數296
13.2 使用RCU拯救並行軟件性能297
13.2.1 RCU和基於每CPU變量的統計計數297
13.2.2 RCU及可插拔I/O設備的計數器300
13.2.3 數組及長度300
13.2.4 相關聯的字段301
13.3 散列難題302
13.3.1 相關聯的數據元素302
13.3.2 更新友好的哈希錶遍曆303
第14章 高級同步304
14.1 避免鎖304
14.2 內存屏障304
14.2.1 內存序及內存屏障305
14.2.2 如果B在A後麵,並且C在B後麵,為什麼C不在A後麵306
14.2.3 變量可以擁有多個值307
14.2.4 能信任什麼東西308
14.2.5 鎖實現迴顧312
14.2.6 一些簡單的規則313
14.2.7 抽象內存訪問模型314
14.2.8 設備操作315
14.2.9 保證315
14.2.10 什麼是內存屏障316
14.2.11 鎖約束325
14.2.12 內存屏障示例326
14.2.13 CPU緩存的影響328
14.2.14 哪裏需要內存屏障329
14.3 非阻塞同步329
14.3.1 簡單NBS330
14.3.2 NBS討論331
第15章 並行實時計算332
15.1 什麼是實時計算332
15.1.1 軟實時332
15.1.2 硬實時333
15.1.3 現實世 深入理解並行編程 下載 mobi epub pdf txt 電子書 格式
深入理解並行編程 下載 mobi pdf epub txt 電子書 格式 2024
深入理解並行編程 下載 mobi epub pdf 電子書還可以,還可以,還可以
評分好
評分很有名的一本書,內容專業
評分好書,專業視點,前沿實用
評分很好,值得購買,以後,想買收還是找京東希望多多做活動。
評分正版書,用塑料薄膜包著的,書的內容還沒看,不過看著挺搶手
評分努力學習中
評分有點小貴,內容還可以
評分老公有買書癖好,買瞭好多好多
深入理解並行編程 mobi epub pdf txt 電子書 格式下載 2024