从锦囊妙计想到的08–分布式计算

——分布式任务协作, 数量老是不正确的问题! 每次都不对, 谁来救救我哦!!

前情回顾

前面几回都是在烙饼, 一开始烙饼给关羽累坏了,  原因是关羽不会循环语句, 把循环用顺序结构写, 造成400张饼的锦囊要写很久, 累坏了关羽。 关羽学会了循环语句, 但是立刻把张飞累死了, 原来关羽的循环语句没有退出语句,因此张飞永远干不完(这个类型的循环是死循环), 只有关羽改进了循环,在循环中添加了判断语句若是满足了数量的要求, 就退出循环,这样张飞就不那么累了。可是问题是张飞烙饼的速度还是慢, 因此恰巧天神哪咤经过传送张飞三头六臂的办法(其实就是开多线程),这样张飞就可以在单位时间内生产出3倍数量的饼来, 可以加快时间。

出名的张飞

俗话说, 人怕出名猪怕壮, 张飞自从有三头六臂的烙饼神功后, 烙饼速度和手艺大进, 全军都已经尽人皆知了。一日,训练归来, 大家训练的很累, 大家也都知道三爷(张飞), 有烙饼的神艺, 因此纷纷说要品尝一下三爷的烙饼。张飞心想, 俺老张有神艺在身, 正好显示一下。

三爷数了数, 这些人吃饼 , 正正好5000张饼。心想看来我要大显身手了!

狭小的厨房

张飞心里算计了一下, 上次5头10臂2个小时烙饼200张, 那么1小时1个人(1个头)20张饼。

那么5000张饼, 按照这个速度烙下去就需要250个小时, 那么大家都的饿晕了。

看来6头  需要41小时

12头  20小时

...

100头 约2.5小时

老张考虑到这里心想看来 需要变为100头200条臂膀才能在2.5小时内完成烙饼任务, 说变就变。变变变。。。

结果:

jb

任何资源, 东西也好都是, 有限的, 当到一定时候就容不下了。 厨房自然有大小, 10几个人的厨房已经非常大了, 90多人, 哪里能装的下。 厨房外面自然无法烙饼了。

我们也该说道正题了, 厨房有大小, 那计算机的资源也是有大小的。 厨房一般也就是最多容纳10多人的吧,目前计算机普通的也就是相当于8个cpu,或者16个等, 都是比较正常的, 在多的, 就不常见了, 我们就不讨论了。

一个cpu就相当于一个张飞同志, 16个, 就相当于16个张飞。

张飞的妙招

张飞看了一下, 我家厨房是没这么大了, 看来, 还得在找几个厨房,然后把我老张的分身都放过去, 然后排我的传令兵去下达命令了。

如下图:

dc

如上图, 张飞同志租赁了, 若干个厨房(一共租了10个厨房), 每个厨房都有10多个张飞(图中省略一些人, 没办法画出来)。

厨房租赁好了,张飞给每个厨房分配了两个传令兵,来传达张飞的命令。

分布式烙饼

为什么叫做分布式烙饼, 主要是烙饼的工作, 分别分布在不同地点的不同厨房中, 因此叫做分布式烙饼。

计算机中,很多程序也是由分布到不同机房或者不同房间,不同机架的计算机(厨房)而共同完成一个任务, 这样的任务叫做分布式计算,或者分布式系统。

张飞说, 小的们准备好了吗(好像西游记里面老妖怪叫小妖怪)? 小妖们回答, 准备好了!

张飞说 开始烙饼, 然后各个传令兵就分别开始走向自己负责传令的厨房吩咐开始烙饼。

传令兵走后, 张飞根据 现在的厨房数量, 和每个厨房中 头数(三头六臂中,每个头都都可以独立烙饼),因此计算了一下, 2小时30分钟后烙饼就够了。

然后等一个小时25分钟后,张飞再次大喊一声,停止烙饼, 然后第二批传令兵也出发了, 分别去他们自己的厨房传达停止烙饼的命令, 然后同一次去的传令兵一起, 把每个厨房的烙饼都 抬了回来。

张飞把这些烙饼都汇总到一起, 数了数, 5332张饼。

张飞心里在想, 我明明计算好的 1小时25分钟后, 就可以烙5000张饼, 为什么多出一些??

------------------------------

这个问题非常非常重要, 为什么多出来?  为什么不是正好? 有没有可能下次在进行还是多, 或者下次用这个办法会变少?

-----------------------------

分析一下可能原因。

首先, 张飞算错了 时间,  若是发生这个情况 很可能数量不对, 当然存在多的可能。(这个情况下, 也有可能数量刚刚好的!  更深的原因我们现在不谈, 也可能存在少的可能)。

另外, 张飞若是把时间算的正确了, 就是刚刚好这些厨房都用2小时30分钟(这个就是2.5小时) 时间烙饼, 然后停止烙饼, 等等,

那么在这个情况下 是否烙饼数了就刚刚好 是 5000张呢??

其实, 无论做多多少遍,  最后大部分 都不是  5000张饼??? 为什么?

这个是非常严重的一个问题, 我们要彻底的分析出这个问题的原因, 才能解决这个问题。

(像烙饼这个, 数量不准确还可以勉强接受, 但是, 若是出售一些水果给用户, 人家用户就要5000个, 那么多采下来的卖不掉 , 就会烂掉的!!  有经济损失的!)

因此我们把 为什么数量不准的 问题要分析一下!

如下图,是 这个分布式烙饼的一个基本的 示意图

分布式烙饼时间示意图

 

如上图,  有10个厨房, 他们不在一个地点, 有可能距离很远。这里为了说明问题, 特定选择了距离较远。其实即使距离在近也存在这个问题。 相关情况我们后面会说明。

张飞在 t1的时候发布开始烙饼的命令, 然后不同厨房的传令兵开始沿着自己的最近的路线, 用最快的速度去传令。

传令

然后, 张飞在t2的时候  下达结束烙饼的命令, 然后第二批传令兵去下达停止烙饼的命令

传令2

然后各个厨房在收到 结束烙饼命令后, 就停止烙饼的工作。

在开始烙饼命令开始, 到停止烙饼命令结束直接的时间烙的饼最后汇总到一起。统计一下, 一般不会达到预期的5000个的。 为什么?

传令3

如上图, 以最后一个厨房为例, 若是前后两次传令兵  都能走出  途中  红色箭头的路线, 那么他生产出饼数才能满足5000个的要求。

但是实际最后一个传令兵会走出 蓝色箭头的  时间来, 那么这个误差就会导致 总体上的 饼的数量 同5000个不同

无论什么都需要时间

从上面分析我们可以得出:

1. 无论什么事情都需要时间,  无论你距离多么近, 无论你多么快,时间肯定是需要的。

因此传令一定需要时间, 没有办法避免的。

即使现代的计算机也是需要时间才能传递信息的。 计算机A(张飞)=》 计算机10(厨房10)传递命令, 也是需要时间的, 只是需要的少而已。

但是仍然有。

2. 无论任何人, 任何事物都难保证 沿着相同的路线运动中, 会重复前一次的所用时间的, 不同人就更难。

因此两个传令兵,沿着相同的路线到达厨房10的时间一定是不相等, 必然有早有慢

计算机也好, 人也好, 什么东西都没办法保持始终不变的速度。即使你自己能做到这一点, 也会受到来自外界的干扰, 比如路上有人找你打招呼, 比如天下雨了。。。

结论

1. 这个分布式的烙饼方案能极大的提高烙饼的速度

2. 任何事物,任何东西都会有极限,人也好, 计算机也好, 厨房也好都有极限。

当我们一个事情(烙饼)在一个有限的资源下满足不了我们(例如例子中, 一个特定厨房中), 我们就会寻求在更大的范围内进行, 然后通过一定的手段协调这些事情(例如,通过传令兵来传递命令,协调10个厨房)

3. 任何人, 任何事物, 做事情都需要时间的。

4. 任何人, 任何事物, 即使用相同的路线, 相同条件下, 也无法达到前一次的 所用的时间, 就是就是传递开始烙饼的时间, 同结束烙饼的时间一定是不同的。

更何况是不同人传令, 并且他们传令走的路线可能不同。

5. 即使传令的时间相同, 开始时间相同, 也不能保证生产出烙饼的数量刚刚好的, 因为不同人烙饼速度是不同的。

最后以上全部的因素加到一起, 决定了,上述烙饼数量上一定是 不满足要求的!!!

 

有没有  满足要求的办法, 有!!  下篇我们给出办法来。

 

相关文章

计算机介绍                                  从锦囊妙计想到的01

流程图(分支结构)介绍          从锦囊妙计想到的02

线程介绍                                     从锦囊妙计想到的03

循环结构介绍                             从锦囊妙计想到的05

流程线程总结                             从锦囊妙计想到的06

cpu和线程定义、开始               从锦囊妙计想到的07

分布式计算                                  从锦囊妙计想到的08

分布式中事件和计数                 从锦囊妙计想到的09

内容总结                                     从锦囊妙计想到的10

数据类型,变量简介                从锦囊妙计想到的11

函数和参数                                从锦囊妙计想到的12

用户交互与数据输入输出       从锦囊妙计想到的13

人机交互界面                            从锦囊妙计想到的15 

过程与对象                                从锦囊妙计想到的16

同步和异步                                从锦囊妙计想到的17

顺序打印                                    从锦囊妙计想到的18

数据输入输出                            从锦囊妙计想到的19

屏幕坐标和打印                        从锦囊妙计想到的20

java函数控制输出                     从锦囊妙计想到的21

逐步细化解决复杂问题           从锦囊妙计想到的22

java入门                                    从锦囊妙计想到的23

java复杂过程分析                   从锦囊妙计想到的25

中间辅助功能解决问题          从锦囊妙计想到的26

叠加操作输出复杂图形          从锦囊妙计想到的27

时间和空间                               从锦囊妙计想到的28

编写边测解决问题                  从锦囊妙计想到的29

让程序动起来                          从锦囊妙计想到的30

程序往复运动                           从锦囊妙计想到的31