Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1460757
  • 博文数量: 1125
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 16710
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-03 14:05
文章分类

全部博文(1125)

文章存档

2011年(1)

2008年(1124)

我的朋友

分类: 服务器与存储

2008-08-14 13:10:38

现在网上关于这方面的讨论越来越热火了,我也被弄的蠢蠢欲动加入到这里面来。虽然不是编程专家,没有真正的实干参与一些大的东西的构建,但不妨碍我做这方面的思考,也许对于外行人去考虑专家才能考虑的内行的问题,天然的就能以最通俗最朴素的角度去看,当然也避免不了把复杂的问题想的简单,徒增笑料。

云计算,涉及到云和计算,我先说说计算吧。

现在文明对计算的需求是越来越多,越来越复杂。先不管那些复杂性,在我看来,计算量很大程度是海量的循环和迭代,对于后一次循环需要前一次的结果的迭代,没办法,扯不开,但是对于每次循环牵扯的东西比较固定,不依赖上次的结果的,就可以把海量的循环分成一段段,多台机器并行处理。我不知道并行计算是否是这么考虑的,如果被我误解了,就当笑话看吧,复杂的事情我想不明白,想想cpu里面所说的乱序执行阿之类的就如坠云里,不知道是不是因为没有相关性,而可以不必考虑顺序的随便来。说这么多不知所云,还是让我找个例子来说明吧,就拿两个大质数的乘积的分解来说。计算机发展到现在,质数序列的寻找是非常容易的事情了,不过反过来,一个非常大的数,要把它分解开来,看看是哪两个质数的乘积,对于现在的计算机,那是很困难的一件事,不是因为有多么玄虚,而是那种海量循环花的时间就让人吃不消。对于一个大数N,想知道它是由哪些质数的乘积,一个最笨的办法就是用2~sqrt(N)一个个的去除,看看剩下的是不是整数就行,这就涉及到循环了,不过各个循环没什么相关性,如果并行的话,就可以把这样的循环分成一段段交给不同的机器去做。不过这个办法比较笨,完全可以用2~ sqrt(N)里的质数去筛选,不过质数序列本身没有什么规律性可言,所以要把很大的质数序列分段分发给不同的机器的话,又会涉及到海量的数据流。我们就是在这样的简单的代码但冗余的运算量和很少的数据流,以及有效的运算但庞大的数据流之间寻找一个平衡。还有就是,分段下发给不同的计算机本身,如果分的过细,分发和结果的收集工作量就很大,如果分的过粗,下层的计算机要花很长时间才能有结果,如果以后大街上,家庭里,这样的计算机也可以做一个节点的话,人为的中断也会影响运算的效率,这也需要一个平衡的折中。

下面谈一下云,我要说的云是指所有连上网的计算机以及网络,这样一个整体。我们现在网络上传送的都是数据流,即使网络软件,安装前仅仅是数据的形式下载,安装好基本上就固定了,接收网上的数据,处理后发送结果。也许一些计算集群,通过网络传送的会有代码流,接收到之后结合数据而运行,随结果变化的代码再不断的分发。还是以上面的例子来说明,如果下面的某台子节点发现m能够被N整除,其把结果发送给中心计算机之后,中心计算机就应该根据结果,看看N/m能分解成什么样的数乘积,再重新根据N/m去分段和下发任务,而不是让下面的计算机继续傻算。也许读者觉得这里面只涉及到NN/m和分段这样的数据,没有变化的代码,实际上网络计算涉及到的复杂性根本是我没法想象的,所以我只好举这样的很简单的一个例子。这里m当然还可能继续分解,又涉及到新任务的发配。

阅读(229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~