并行程序设计探讨(2)——并行实现技术
通过“并行程序设计探讨(1)”的介绍,相信大家都已经对并行系统相关的概念有了初步的了解。不过看起来挺吓人的,一堆的术语和概念,想起来头就有点大!!
幸运的是真正需要进行并行程序设计的系统其实不多,我们来看看:
SISD:本质上决定了不可能是并行的;
SIMD:专有系统,相信绝大部分人都没有接触过;
MISD:没有这样的系统;
MIMD:本质上就是为了支持并行的。
因此,在处理并行程序设计的时候,我们其实只要考虑MIMD这类系统就OK了!谢天谢地Orz!!:)
不过别高兴的太早,MIMD也有很多啊,怎么办呢?MIMD分为共享内存和消息驱动(其实就是分布式内存)两种,我们还是从分类上来稍加分析,看看如何处理。
共享内存:所有CPU共内存,所有CPU由一个操作系统控制的,例如Windows和Linux/UNIX,目前流行的多核、多CPU机器都是属于这种;
消息驱动:其实就是分布式内存,CPU由不同的操作系统控制,不同的CPU之间通过网络通信。例如网格Grid是通过因特网通信、集群Cluster是通过局域网通信、MPP是通过专有的高速网络通信。
通过上面的对比,聪明的读者估计很快就想到了这两种系统并行程序实现方式的差异:
共享内存:通过操作系统的多进程多线程来完成并行任务,通过进程间通信来完成协作;
消息驱动:通过多台机器来完成并行任务,通过消息来完成协作。(MPP物理上看是一台机器,逻辑上是多台机器)。
当然,由于消息驱动系统中每个处理单元都是一台独立的机器,对这台独立的机器本身当然也可以通过共享内存来实现并行处理。
嗯,非常不错,经过我们的层层分析和筛选,原来各种各样的看起来很吓人的并行系统,最终被我们归纳总结出两种并行实现技术:多进程多线程、多机协作。
套用侯捷大师的一句话给自己贴点金,正所谓:深入浅出!!
==========================未完待续,后面介绍Window和Linux的多进程多线程===============================