24小时热门版块排行榜    

查看: 568  |  回复: 3
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

yalefield

金虫 (文坛精英)

老汉一枚

[交流] 科普一下:分布式计算概要

由于多核心、多处理器也多计算机日渐成为主流计算模式,分布式编程对开发人员的技术素养提出新的挑战和新的要求,无论对系统开发还是对于应用程序开发都是一样。

一般来说,我们可以这样理解:
(1)共享内存的多个处理单元就是多核心
(2)每个有本地内存的多个独立处理器共享总线的就是多处理器
(3)没有共享资源、通过网络连接的是多计算机。

因为在单核单处理器下面已经发展了并行编程技术,比如处理不同进程之间或者同一进程的多个线程之间的协同,所以分布式编程在不久的将来会成为从业人员的标准技能,以后可能没有不是分布式的编程了。

首先,必须明了进程和线程的区别才好理解分布式编程的概念。

这是两个最常用而又最模糊的概念。

进程和线程都是程序。
进程是计算机操作完成某种任务的最基本的资源分配单位;
线程就不能独立分配资源,而是在进程分配到的资源中获得自己的资源。


从完成任务的观点看,有一个例子很形象。
一个工程师按照菜谱做生日蛋糕,这就相当于进程,现和面、加水、加糖、加鸡蛋、搅拌,然后放进烤箱里,定时间,打开开关等等;
做着做着工程师的儿子把玩儿刀子把手给切破流血了,工程师放下手里在做的活儿,给儿子包扎伤口,这相当于线程;
把儿子安排停当以后又重新开始做生日蛋糕,这个时候又有人敲门,这相当于另外一个线程;
答应了来访者以后工程师又回来完成做生日蛋糕的任务,继续执行原来的进程。
有的书上就把进程叫做任务。

分布式编程包含两类重要技术:
一是用于给多核心和多处理器编程的并行处理;
二是给多计算机系统编程的基于消息传递界面的技术。
而且这两类技术是重叠的,因为分布式和并行处理在语义学上几乎是相同的,两个术语在强调不同的方面分布式强调空间分离的特征,而并行强调时间上同时并发的性质
关于分布式和并行两个概念的相同和区别我在前面有了一个解释。不同的平台上,实现分布式编程的战略(Strategy)不一样,但是都要解决进程间、准确地说是解决线程间通信问题,这一点则是共同的。因为不同的进程在操作同一个对象的时候都必须要处理好互相干涉和内存不一致的问题;而对于多计算机系统,另外提出了处理与网络连接和数据传输协议相关的要求,多核心和多处理器系统就不存在这样的问题。
例如,Python的战略是使用“消息传递界面Message Passing Interface”就是MPI、集群技术以及网格技术来处理多计算机系统,而用许多Python Parallel类库如pp、pprocess等等来处理对称多处理(SMP)并行计算问题。
Java实现分布式编程的技术叫RMI(Remote Method Invocation),好像应该翻译成“远程方法调用”,我记得C++里是叫远程方法调用的,就是Remote Method Call。相应的API是java.rmi.Remote,包含在“分布式对象应用Distributed Object Application”这个更一般的概念的框架下面。
可以列出关于分布式编程的参考书目,但是也可以直接从Python或者Java看它们是怎样具体处理的,这样做更容易入门,掌握技术,了解理论概念。
Python的好处是开宗明义旗帜鲜明,有并行处理和分布式编程的Wiki页和各种专门技术的社区和讨论组,但是许多没有完善的文档;Java没有亮出分布式的旗帜,但是他们的文档帮助还是最好的,更容易上手。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

星竹石

铁杆木虫 (著名写手)

收藏了,虽然目前用不到,
得即高歌失即休,多愁多恨亦悠悠。今朝有酒今朝醉,明日愁来明日愁。
3楼2008-08-02 18:24:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

gloria888

金虫 (小有名气)

言简意赅,颇有拨云见日的效果!不愧是木虫前辈!LZ一定是老师!敬礼!
4楼2008-10-08 11:34:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见