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

简介:

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

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

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

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

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

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

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

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

u       没有多机同步机制

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

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

u       没有“老大”

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

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

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

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

 

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

 

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

详细的方案请各位参考COMCORBARMI的相关文档。

 

相关文章
|
5月前
|
机器学习/深度学习 分布式计算 数据处理
分布式计算框架:并行力量的交响乐章
分布式计算框架如Apache Spark解决单机计算挑战,通过拆分任务到多机并行处理提升效率。Spark以其内存计算加速处理,支持批处理、查询、流处理和机器学习。以下是一个PySpark统计日志中每日UV的示例,展示如何利用SparkContext、map和reduceByKey进行数据聚合分析。这些框架的运用,正改变大数据处理领域,推动数据分析和机器学习的边界。【6月更文挑战第18天】
203 2
|
3月前
|
分布式计算 并行计算 大数据
NumPy 并行计算与分布式部署
【8月更文第30天】随着数据量的不断增长,传统的单机计算模型已经难以满足对大规模数据集处理的需求。并行和分布式计算成为了处理这些大数据集的关键技术。虽然 NumPy 本身并不直接支持并行计算,但可以通过结合其他库如 Numba 和 Dask 来实现高效的并行和分布式计算。
36 1
|
3月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
3月前
|
存储 异构计算
自研分布式训练框架EPL问题之通过strategy annotation实现流水并行如何解决
自研分布式训练框架EPL问题之通过strategy annotation实现流水并行如何解决
|
4月前
|
分布式计算 API 对象存储
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
715 11
|
5月前
|
负载均衡 并行计算 Java
分布式系统中,利用并行和并发来提高整体的处理能力
分布式系统中,利用并行和并发来提高整体的处理能力
|
6月前
|
分布式计算 并行计算 数据处理
NumPy的并行与分布式计算实践
【4月更文挑战第17天】本文探讨了如何使用NumPy进行并行和分布式计算以提升效率。介绍了利用`numexpr`加速多核CPU计算,设置`NUMPY_NUM_THREADS`环境变量实现多线程,并通过Dask和PySpark进行分布式计算。Dask允许无缝集成NumPy,而PySpark则将NumPy数组转换为RDD进行并行处理。这些方法对处理大规模数据至关重要。
|
6月前
|
存储 分布式计算 大数据
【云计算与大数据技术】分布式计算、虚拟化技术、并行编程技术等技术讲解(超详细必看)
【云计算与大数据技术】分布式计算、虚拟化技术、并行编程技术等技术讲解(超详细必看)
763 1
|
算法 安全 调度
基于串行和并行ADMM算法在分布式调度中的应用(Matlab代码实现)
基于串行和并行ADMM算法在分布式调度中的应用(Matlab代码实现)
110 0
|
机器学习/深度学习 并行计算 安全
PyTorch并行与分布式(四)Distributed Data Papallel
PyTorch并行与分布式(四)Distributed Data Papallel
269 0

热门文章

最新文章