多核时代:并行程序设计探讨(6)——多机协作(又叫分布式处理)

                                  多机协作(又叫分布式处理)

嗯,费了九牛二虎之力,终于将Windows和Linux对比完了。你是否准备伸个懒腰,喝杯热咖啡,听点音乐来放松一下呢?

别急,革命尚未成功,同志还需努力,铁还得趁热打。还记得第二篇博文里面总结的两种并行实现技术没有?一个是“多进程多线程”,另一个是“多机协作”,到目前为止我们基本上只把“多进程多线程”分析完毕了,还有另外一个“多机协作”没有分析,本篇我们就探讨一下“多机协作”这种实现机制。

不过事先申明,由于“多机协作”这种实现机制范围太广:小到普通的双机、中到模拟地球运算的大型机或者巨型机、又如Google这样NB的公司发明的分布式文件系统、再到现在热热闹闹的“云计算”、或者大家最常用的BT、电骡等P2P技术都属于这一范畴,且实现太过复杂,不同的系统实现机制也相差很大,限于本人能力,只能“蜻蜓点水”了,如有兴趣研究,推荐《分布式系统概念与设计》这本书,我也没有读过,不过据说还不错。

幸运的是“多机协作”实现机制和“多核编程”并没有什么关系,因此即使蜻蜓点水对大家的多核设计水平影响不大。

废话了半天,让我们转到正题上。虽然前面提到了“多机协作”范围很广,实现机制也各不相同,但既然大家都划到“多机协作”这一类里面,自然有一些基因是相同的。那么就让我们对“多机协作”进行一次基因图谱制作,看看究竟有哪些共同基因。

u       只有一种通信方式:消息。

是的,看到这个不要惊讶,虽然实现形式可以多种多样,但本质上来说,多机协作系统只有一种通信方式:消息。不管是基于TCP/IP的Socket消息,还是基于电信网7号信令的MAP消息,还是内部光纤通信的XX消息,本质上这些都是消息通信。和“多进程多线程”多种多样的方式来比,显得有点单薄,因此也就增大了设计的难度。

u       没有多机同步机制

看到这个是不是更加吃惊?但现实就是如此残酷,多机协作没有一个现成可用的同步机制来实现诸如互斥、事件、信号量等同步功能。

但实际应用中你的应用又不得不用到这些东东,例如Google的分布式文件系统,因此你要自己去实现这些东东,这也增大了设计的难度。

u       没有“老大”

这里的老大不是指黑社会的老大哈,相反它是一个好公仆,这个“老大”负责全局的事物管理。嗯,你可能会说“多进程多线程”里面也没有老大的啊?

多进程多线程之间确实没有天然的老大,谁当老大完全是由我们设计人员决定的,但还有一个我们无法决定的老大:操作系统!操作系统在“多进程多线程”实现机制里面完成了众多我们没有怎么关注但却不得不用到的功能:进程线程创建、调度、隔离、通信、同步等。

在“多机协作”实现机制中,唯一的老大就是我们设计人员!你要决定如何隔离、如何调度、如何通信、如何同步等所有这些事情,因此设计难度又上一层楼!

举个最简单的例子:多进程多线程实现机制中,时间或者时钟都是操作系统来控制和提供;而在多机协作中,光一个时间或者时钟同步就能让你累个半死!!

 

看完上面的初步分析,我们可以得出一个这样的结论:多机协作只有一个消息通信,然后要基于消息通信来实现同步、通信、管理、调度、分布式处理等所有你所需要的功能!所以“多机协作”要比“多进程多线程”设计复杂得多。

 

看到这里,你是否泄气了呢?本着“不抛弃,不放弃”的精神,我们还是要勇敢面对,而且幸好现在也有很多多机协作的解决方案了。流行的有三个:微软的COM/DCOM、ORG的CORBA、SUN的Java RMI。这些多机协作(或者叫分布式)方案封装了很多底层的通信、调用、同步等机制,使得我们能够简单的实现多机协作。

详细的方案请各位参考COM、CORBA、RMI的相关文档。

 

时间: 2024-10-01 06:29:59

多核时代:并行程序设计探讨(6)——多机协作(又叫分布式处理)的相关文章

多核时代:并行程序设计探讨(1)——并行系统

  并行程序设计探讨(1)--并行系统 大家可能会有疑问:你一会儿并行,一会儿多核,到底是谁跟谁啊? 我开始也有这个疑问,甚至以为并行就是多核,其实两个并不能对等,一句话就是:多核是并行的一种. 并行本身是一个广泛的概念,其实早在多核之前并行处理就已经存在N久了,大家想想看:IBM.SUN.HP的小型机,哪个不是多CPU的?甚至连DELL的工作站,都是两CPU的,更不用说那些中型机.大型机.巨型机了.所以说"并行处理"是一个比"多核处理"要广泛.要早的多的技术,多核

多核时代:并行程序设计探讨(2)——并行实现技术

并行程序设计探讨(2)--并行实现技术 通过"并行程序设计探讨(1)"的介绍,相信大家都已经对并行系统相关的概念有了初步的了解.不过看起来挺吓人的,一堆的术语和概念,想起来头就有点大!! 幸运的是真正需要进行并行程序设计的系统其实不多,我们来看看: SISD:本质上决定了不可能是并行的: SIMD:专有系统,相信绝大部分人都没有接触过: MISD:没有这样的系统: MIMD:本质上就是为了支持并行的. 因此,在处理并行程序设计的时候,我们其实只要考虑MIMD这类系统就OK了!谢天谢地O

多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)

并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Windows和Linux(作为UNIX类操作系统的代表,下同)这两个操作系统了. 真是冤家路窄,Windows和Linux这对冤家在这里又碰面了!! 当然,我这里不是要挑起Windows和Linux谁优谁劣的争论,对于一个真正的技术人来说,Windows和Linux本身并没有优劣之分,只有在不同的使用

《多核与GPU编程:工具、方法及实践》----第2章 多核和并行程序设计 2.1 引言

第2章 多核和并行程序设计 本章目标 学习设计并行程序的PCAM方法. 使用任务图和数据依赖图来识别可以并行执行的计算部分. 学习将问题的解法分解为可并发执行部分的流行的分解模式. 学习编写并行软件的主要程序结构模式,如主/从和fork/join. 理解分解模式的性能特点,如流水线. 学习如何结合分解模式和合适的程序结构模式. 2.1 引言 即使是对于经验丰富的专业程序员,向多核编程的过渡也并不简单.多核和并行编程往往会打破语句按严格顺序执行的串行程序的传统风格.当许多事情在同一时间发生时,正如

多核时代:并行程序设计探讨(4)——Windows和Linux对决(进程间通信)

                             进程间通信 多进程和多线程本质上就是将原来一个进程或者线程处理的任务分给了多个进程或者线程,也可以说是将原来一个CPU处理的任务分给了多个CPU处理,类似于随着生产力的发展,原来一个人包打天下的个人英雄主义时代被分工合作的团队取代一样. 既然是一个团队,就必然涉及到分工合作问题,并行程序的设计本质上就是解决"分工"和"合作"的问题.其中"分工"主要是后面讲到"并行程序设计模式&q

多核时代:并行程序设计探讨(7)——并行编程模式概览

                                          并行编程模式概览 前面的5.6篇博文,都是和并行编程相关的基础知识,如果你一路看来,基本上也能够开始进行并行编程设计了,也可以和别人吹吹牛.聊聊天了. 但"欲穷千里目,更上一层楼",前面的毕竟都是基础知识,拿来直接设计,虽然能够完成任务,但就像在茫茫大海中航行,没有灯塔,难免会走很多弯路.甚至绝路! 所以我们要在这些基础知识之上,学习一套系统的分析问题.设计方案.应用实现的理论来指导我们作出正确的.优秀

多核时代:并行程序设计探讨(9)——数据分解模式Data Decomposition

                                                   Data Decomposition 1.1        问题 如何将待解决的问题的数据分解为能够并行运行的数据单元(units)? 1.2        上下文 并行算法的设计者必须首先详细了解待解决的问题,除此之外,还必须识别如下几个关键因素: 1)计算强相关的部分:待解决问题中的哪部分需要进行大量运算: 2)关键数据结构:主要是对什么数据进行运算:如何进行运算.   当基本问题理解后,设

多核时代:并行程序设计探讨(8)——任务分解模式Task Decomposition

                                                              Task Decomposition 从本章开始我们就正式来介绍每个模式了,参考设计模式的做法,每个模式我们都按照如下的内容进行介绍:问题(Problem).上下文(context).考虑因素(Forces).解决方法(Solutions).至于样例,就请各位看官直接看原文了.   1.1        问题 如何将待解决的问题分解为能够并行运行的"任务(task)&quo

多核时代:并行程序设计探讨(10)——任务分组模式Group Task Pattern

                                                    任务分组模式Group Task Pattern 1.1        问题 一个问题的多个任务如何聚集成一组,以简化依赖关系的管理? 1.2        上下文 当任务和数据分解完成后,就可以应用此模式了. 任务分组模式描述了分析任务之间的依赖关系的第一步.在任务分解的过程中,我们按照任务可以并行运行来考虑,然而我们并没有强调一个很明显的事实:这些任务并不是组成一个扁平(译者注:指任务之间