【分享说明】:
我会花很多时间或浅或深的研读一本书,然后总结一些提炼出来的精华,用简短的语言,让其他人能够用很少的时间大致知道这本书能带给自己的价值,如果适用自己,鼓励买一本正本实体书细读和收藏。
通篇会以原文目录为结构,给出提炼内容,如果不重要或者一看目录就懂的,会保留目录,有不明白的,以原文学习为参照。
【书名】:《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 系统接口