【讀書精華分享】《c++並行與分佈式編程》Cameron Hughes/ Tracey Hughes著,肖和平譯

【分享說明】:

我會花很多時間或淺或深的研讀一本書,然後總結一些提煉出來的精華,用簡短的語言,讓其他人能夠用很少的時間大致知道這本書能帶給自己的價值,如果適用自己,鼓勵買一本正本實體書細讀和收藏。

通篇會以原文目錄爲結構,給出提煉內容,如果不重要或者一看目錄就懂的,會保留目錄,有不明白的,以原文學習爲參照。


【書名】:《c++並行與分佈式編程》Cameron Hughes/ Tracey Hughes著,肖和平譯

【發行】:2004年

【適用】:分佈式0基礎人員,希望強化理論知識的,強化實踐跳過

【總結】:

1、通篇很細心的講了很多分佈式相關的概念,需要獲得這方面理論知識的推薦。

2、能篇給出了很多分佈式相關的技術說明和用c++的實現方法,這塊可以算是分佈式的起源技術,主要收穫分佈式機制。

3、全文以例子貫穿,講的很細緻,利於實踐加強理解。

4、講解的相關技術已經過時或被封裝,不是當前實踐的主流技術,這個也不意外,2004年的書,13年過去了。

5、通篇假設了你是初學者,將關聯知識都集成了,上手閱讀快。

【章節總結】

1、2章從專業的角度講分佈式概念,沒學過的看一下,完善一下理論知識。

3、4章從操作系統、計算機組成原理方面,講了進程和線程概念。掌握的可以跳過,建議看一下線程缺點和線程模型。

5、7章講了並行(多線程、多進程)編程和異常處理的理論知識,有這方面開發經驗的跳過吧。

6、8、9章重點講原理和教你使用PVM實現集羣編程、使用CORBA跨節點訪問對象、MPI節點通信,PVM是重點,另2章看看目錄再實踐一下就行。

10-12章面向軟件設計者,教你怎麼在軟件設計上(UML模型)表示併發、併發設計理論、角色抽象,管理角色很重要。

13章是實踐例子講解


【正式分享】

譯者序
序言
第1章 併發編程的樂趣 
1.1 什麼是併發? 
》併發:兩個事件在同一時間間隔內發生
目標:擴充計算機處理能力
說明:不一這是同時,可能處在時間間隔內的不同時間片,比如單核機器多任務
》實現併發的兩種基本途徑:並行和分佈式,這兩個概念不同,但又有交叉
並行:一件事合幹,將一個程序的多個任務(作業)給一臺設備的多個處理器同時處理
分佈式:一起合力幹活,將多個任務分給多個處理器處理,可以通過網絡跨設備,可以是多程序的
並行有時候是分佈式的,例如PVM(虛擬並行計算機)
分佈式通過用於實現並行,例如MPI(消息傳遞接口)
但分佈式不全是並行,典型的就是業務拆分爲多程序。
1.2 並行編程的優點 
1.3 分佈式編程的優點 
1.4 最少的工作需求 
》並行和分佈式設計包括的3個問題
分解:分成獨立可並行任務
通信:各任務之間互通數據
同步:各任務之間同步共享數據
1.5 軟件併發的基本層次 
》指令級併發:y=(a+b)*(c+d),a+b和c+d可以一起指令計算
》對象級併發:不同對象分配到不同處理單元
》應用程序併發:不同程序同時處理
1.6 C++中沒有支持並行性的關鍵字
》c++並行立場:庫級解決
》系統庫POSI線程庫:實現多進程、多線程
》MPI標準:實現消息傳遞規範,MPICH是一個實現庫。
》PVM:集羣編程包,組集羣
》CROBA:分佈式跨平臺面向對象編程標準,用於實現跨節點訪問對象。MICO是一個實現庫。
1.7 並行和分佈式編程的編程環境 
》集羣:用網絡連接多臺計算機,常見
》MPP:大規模並行處理器,單臺機器幾百個處理器(硬件)
》SMP:對稱多處理器系統(軟件),所以資源由同一操作系統控制
小結——關於併發 

第2章 並行和分佈式編程的挑戰 
2.1 範例轉移 
》就是測試用例變多了,使情況變成組合
2.2 協調問題 
》數據競爭:銀行取款,只有一個成功
》無限延遲:等待
》死鎖
》通信問題:異構、質量差
2.3 間或的硬件失效與軟件退出 
2.4 過多的並行化或分佈式可能產生負面後果 
2.5 選擇一種好的體系結構需要進行研究 
2.6 對不同測試和調試技術的需求 
2.7 在並行或分佈式設計中必須進行交流
小結 

第3章 將C++程序分成多個任務 
3.1 進程的定義 
3.2 進程剖析 
3.3 進程狀態 
3.4 進程調度 
3.5 上下文切換
3.6 創建進程 
》c++多進程編程(fork、exec家族、system、posix_spawn)
3.7 終止進程 
3.8 進程資源 
3.9 什麼是異步進程和同步進程 
》異步進程:互相獨立運行
》同步進程:交替運行
3.10 將程序分成多個任務 
小結 

第4章 將C++程序分成多個線程 
4.1 線程的定義 
》線程缺點:
容易破壞進程內存空間。
併發訪問存儲器需要同步操作。
一個線程可以殺死整個進程或程序。
線程只存於單個程序,不可複用。
4.2 線程剖析 
4.3 線程調度 
4.4 線程資源 
4.5 線程模型
》線程模型:
委託模型:分派任務,等待結束
對等模型:扁平化,各做各的
管道模型:裝配線
生產者-消費者模型:
4.6 Pthread庫介紹 
4.7 簡單多線程程序剖析
4.8 創建線程
》linux:pthread、mutex
4.9 管理線程 
4.10 線程安全和線程庫 
4.11 將程序分解成多個線程 
小結 

第5章 任務間併發的同步 
5.1 執行順序的協調 
》開始和結束組合成4種模式
5.2 同步數據訪問 
5.3 什麼是信號量?
》併發編程同步技術:信號量(semaphore)、互斥鎖(mutex)、讀寫鎖(rd_lock)、條件變量(condition)
5.4 面向對象的同步方法
小結 

第6章 通過PVM爲C++增加並行編程能力 
6.1 PVM支持的經典並行模型 
》MIMD:多指令流多數據
》SPMD:單程序流多數據流(SIMD變形)
6.2 爲C++語言提供的PVM庫
》7類使用場景(例程):
進程管理和控制
消息打包和發送
消息解包和接收
任務信令
消息緩衝區管理
消息和效用函數
組操作
6.2.3 PVM程序的基本需求清單
》5項:
設置環境變量PVM_ROOT和PVM_ARCH
二進制能夠被所有機器訪問或存在於所有機器,並且爲不同體系結構的機器分別編譯
啓動用戶能夠ssh或rssh訪問分佈式其他節點
在每個主機上增加一個.rhosts文件列出希望使用的主機,這些主機可能參與
在每個主機增加一個.xpvm.host或pvm_host,列出參與的主機,前綴&表示不自動增加,否則自動增加
6.2.4c++運行庫和PVM運行庫的結合
》注意全局變量不共享,獨立進程
6.2.5 使用PVM任務的方法
》可以按函數、對象、組合分類,通常按邏輯劃分。
SPMD模型
MPMD模型
6.3 PVM的基本機制
》PVM守護進程+pvmd,守護進程會創建pvmd
6.4 在PVM任務中訪問標準輸入(stdin)和標準輸出(stdout)
》最好禁止訪問,不確定來源,父進程可以重定向子進程的 
小結 

第7章 錯誤處理、異常和軟件可靠性 
7.1 什麼是軟件可靠性? 
7.2 軟件層和硬件組件中的失效 
7.3 依賴於軟件規範的缺陷定義 
7.4 考慮在哪裏處理缺陷與在哪裏處理異常 
7.5 軟件可靠性:一個簡單方案 
7.6 在錯誤處理中使用Map對象 
7.7 C++的異常處理機制 
7.8 事件圖、邏輯表達式和邏輯圖 
小結 

第8章 C++分佈式面向對象編程 
8.1 工作的分解與封裝 
8.2 訪問其他地址空間中對象 
8.3 基本CORBA消費者剖析 
8.4 CORBA生產者剖析 
8.5 CORBA應用程序的基本設計藍圖 
8.6 名字服務 
8.7 深入瞭解對象適配器
8.8 實現池與接口池 
8.9 使用CORBA的簡單分佈式Web服務 
8.10 交易服務 
8.11 客戶/服務器範例
小結 

第9章 MPI與使用模板的SPMD和MPMD模型 
第10章 可視化併發和分佈式系統設計 
第11章 設計支持併發的組件 
第12章 實現面向agent的體系結構 
第13章 使用PVM、線程和C++組件的黑板體系結構 
附錄A 類與對象圖解
附錄B 系統接口


譯者序
序言
第1章 併發編程的樂趣 
1.1 什麼是併發? 
》併發:兩個事件在同一時間間隔內發生
目標:擴充計算機處理能力
說明:不一這是同時,可能處在時間間隔內的不同時間片,比如單核機器多任務
》實現併發的兩種基本途徑:並行和分佈式,這兩個概念不同,但又有交叉
並行:一件事合幹,將一個程序的多個任務(作業)給一臺設備的多個處理器同時處理
分佈式:一起合力幹活,將多個任務分給多個處理器處理,可以通過網絡跨設備,可以是多程序的
並行有時候是分佈式的,例如PVM(虛擬並行計算機)
分佈式通過用於實現並行,例如MPI(消息傳遞接口)
但分佈式不全是並行,典型的就是業務拆分爲多程序。
1.2 並行編程的優點 
1.3 分佈式編程的優點 
1.4 最少的工作需求 
》並行和分佈式設計包括的3個問題
分解:分成獨立可並行任務
通信:各任務之間互通數據
同步:各任務之間同步共享數據
1.5 軟件併發的基本層次 
》指令級併發:y=(a+b)*(c+d),a+b和c+d可以一起指令計算
》對象級併發:不同對象分配到不同處理單元
》應用程序併發:不同程序同時處理
1.6 C++中沒有支持並行性的關鍵字
》c++並行立場:庫級解決
》系統庫POSI線程庫:實現多進程、多線程
》MPI標準:實現消息傳遞規範,MPICH是一個實現庫。
》PVM:集羣編程包,組集羣
》CROBA:分佈式跨平臺面向對象編程標準,用於實現跨節點訪問對象。MICO是一個實現庫。
1.7 並行和分佈式編程的編程環境 
》集羣:用網絡連接多臺計算機,常見
》MPP:大規模並行處理器,單臺機器幾百個處理器(硬件)
》SMP:對稱多處理器系統(軟件),所以資源由同一操作系統控制
小結——關於併發 

第2章 並行和分佈式編程的挑戰 
2.1 範例轉移 
》就是測試用例變多了,使情況變成組合
2.2 協調問題 
》數據競爭:銀行取款,只有一個成功
》無限延遲:等待
》死鎖
》通信問題:異構、質量差
2.3 間或的硬件失效與軟件退出 
2.4 過多的並行化或分佈式可能產生負面後果 
2.5 選擇一種好的體系結構需要進行研究 
2.6 對不同測試和調試技術的需求 
2.7 在並行或分佈式設計中必須進行交流
小結 

第3章 將C++程序分成多個任務 
3.1 進程的定義 
3.2 進程剖析 
3.3 進程狀態 
3.4 進程調度 
3.5 上下文切換
3.6 創建進程 
》c++多進程編程(fork、exec家族、system、posix_spawn)
3.7 終止進程 
3.8 進程資源 
3.9 什麼是異步進程和同步進程 
》異步進程:互相獨立運行
》同步進程:交替運行
3.10 將程序分成多個任務 
小結 

第4章 將C++程序分成多個線程 
4.1 線程的定義 
》線程缺點:
容易破壞進程內存空間。
併發訪問存儲器需要同步操作。
一個線程可以殺死整個進程或程序。
線程只存於單個程序,不可複用。
4.2 線程剖析 
4.3 線程調度 
4.4 線程資源 
4.5 線程模型
》線程模型:
委託模型:分派任務,等待結束
對等模型:扁平化,各做各的
管道模型:裝配線
生產者-消費者模型:
4.6 Pthread庫介紹 
4.7 簡單多線程程序剖析
4.8 創建線程
》linux:pthread、mutex
4.9 管理線程 
4.10 線程安全和線程庫 
4.11 將程序分解成多個線程 
小結 

第5章 任務間併發的同步 
5.1 執行順序的協調 
》開始和結束組合成4種模式
5.2 同步數據訪問 
5.3 什麼是信號量?
》併發編程同步技術:信號量(semaphore)、互斥鎖(mutex)、讀寫鎖(rd_lock)、條件變量(condition)
5.4 面向對象的同步方法
小結 

第6章 通過PVM爲C++增加並行編程能力 
6.1 PVM支持的經典並行模型 
》MIMD:多指令流多數據
》SPMD:單程序流多數據流(SIMD變形)
6.2 爲C++語言提供的PVM庫
》7類使用場景(例程):
進程管理和控制
消息打包和發送
消息解包和接收
任務信令
消息緩衝區管理
消息和效用函數
組操作
6.2.3 PVM程序的基本需求清單
》5項:
設置環境變量PVM_ROOT和PVM_ARCH
二進制能夠被所有機器訪問或存在於所有機器,並且爲不同體系結構的機器分別編譯
啓動用戶能夠ssh或rssh訪問分佈式其他節點
在每個主機上增加一個.rhosts文件列出希望使用的主機,這些主機可能參與
在每個主機增加一個.xpvm.host或pvm_host,列出參與的主機,前綴&表示不自動增加,否則自動增加
6.2.4c++運行庫和PVM運行庫的結合
》注意全局變量不共享,獨立進程
6.2.5 使用PVM任務的方法
》可以按函數、對象、組合分類,通常按邏輯劃分。
SPMD模型
MPMD模型
6.3 PVM的基本機制
》PVM守護進程+pvmd,守護進程會創建pvmd
6.4 在PVM任務中訪問標準輸入(stdin)和標準輸出(stdout)
》最好禁止訪問,不確定來源,父進程可以重定向子進程的 
小結 

第7章 錯誤處理、異常和軟件可靠性 
7.1 什麼是軟件可靠性? 
7.2 軟件層和硬件組件中的失效 
7.3 依賴於軟件規範的缺陷定義 
7.4 考慮在哪裏處理缺陷與在哪裏處理異常 
7.5 軟件可靠性:一個簡單方案 
7.6 在錯誤處理中使用Map對象 
7.7 C++的異常處理機制 
7.8 事件圖、邏輯表達式和邏輯圖 
小結 

第8章 C++分佈式面向對象編程 
8.1 工作的分解與封裝 
8.2 訪問其他地址空間中對象 
8.3 基本CORBA消費者剖析 
8.4 CORBA生產者剖析 
8.5 CORBA應用程序的基本設計藍圖 
8.6 名字服務 
8.7 深入瞭解對象適配器
8.8 實現池與接口池 
8.9 使用CORBA的簡單分佈式Web服務 
8.10 交易服務 
8.11 客戶/服務器範例
小結 

第9章 MPI與使用模板的SPMD和MPMD模型 
第10章 可視化併發和分佈式系統設計 
第11章 設計支持併發的組件 
第12章 實現面向agent的體系結構 
第13章 使用PVM、線程和C++組件的黑板體系結構 
附錄A 類與對象圖解
附錄B 系統接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章