【读书精华分享】《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 系统接口

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值