本文是:从锦囊妙计想到的11, 内容是给锦囊分分类。
前面重点说明了, 锦囊的执行路线, 就像可以把这些锦囊串接到一起形成一串, 类似一条线, 因此就有了线程。 同时随着工作量的增加, 一个人已经忙不过来了, 因此需要多个人同时工作, 那么每个人都有了一个执行路线, 因此就了多线程。
多线程中自然存在一些原来一个线程没有的问题,特别是一些非常容易出现错误的问题, 例如
1. 多个线程(两个人)同时拿起一个苹果去吃, 这个如何是好? 这个就是竞争关系, 有多时候, 两个人都看看苹果是没问题的, 但是若是有一个线程(人)去吃, 有人去看 那苹果可能已经比咬了一口, 而看到的是 被咬了的苹果
2. 多个人在不同时间向1号储物柜放东西, 那么最后储物柜里面的东西是那个人的, 是否有意都成问题了。 例如甲在1号储物柜放了兔子, 乙放了一条狗, 最后结果如何?
上述问题都是并行计算中常见一些问题, 并行计算里面还有很多问题, 暂时先不说了, 否则跑题太远了, 今天聊聊 锦囊的分类问题。
一. 可以灵活复用的一堆锦囊
还是故事开始说起。
还是, 张飞烙大饼, 前面张飞烙大饼中, 关羽写了若干的锦囊, 然后张飞按照锦囊进行工作, 烙出大饼来。这么操作若干天后, 关羽发现了一个问题如下:
每次都是关于写了全部的烙饼需要的锦囊, 第二天在需要大饼时, 关羽还需要把全部的锦囊在重新写一遍, 关羽慢慢的也变得烦躁了, 每次都得重复写, 太累了!!!
过了一天, 关羽要求张飞你烙完饼, 锦囊别扔,第二天在接着用,老张听完说好的, 二哥全听你的。
这样下来, 关羽发现节省了很多时间。好景不长,过了几天马超来了, 听说张飞大饼烙的好, 因此也要掺乎一下, 原来烙50张饼, 现在马超来了50张不够了, 那么要70张饼, 这样原来的锦囊都不要用了, 关羽不得已又得重新写一遍。
过了一天, 又了个将官, 又要加饼, 在过几天又来人了, 还要加饼,总之吧, 人员是经常变换, 因此饼数老是变换, 如何解决?
还是关羽聪明, 关羽那了一个结实的锦囊在里面放上一把豆子, 需要烙多少张饼, 就放多少豆子。 张飞在烙饼时仅仅需要每烙一张饼就从这个特定的锦囊中拿出一个豆子, 当豆子都没有了, 张飞就烙完饼了。
这样关羽每天仅仅需要数一把豆子,然后放到锦囊里面, 然后张飞烙饼(其实老张也烦, 但是谁让关羽是二哥, 而大哥去相亲没回来呢!)
二. 图形化说明一下这个程序的流程图
如下图
从上面图形可以看出, 先进行一些烙饼的准备工作,然后烙饼, 最后要进行一步拿出豆子的操作, 这个操作是从 装有豆子的锦囊里面把豆子拿出来, 这样锦囊中就减少一个豆子。
然后判断锦囊中是否还有豆子, 若是没有了豆子就结束了烙饼, 若是还有就回到烙饼准备等操作去进行这个烙饼操作
三. 计算类型的锦囊(指令)和数据类型的锦囊
从上面图中, 明确可以看到两种类型的锦囊, 一种类型的锦囊里面没有任何操作的指示, 他仅仅放了豆子, 然后这些豆子是要被 别的锦囊里面的指示进行指导操作的。
重要的事情说两遍, 就是有一种类型的锦囊里面的东西是 被(这个被非常重要)别的锦囊操作的。
这种 被操作的锦囊, 里面放着东西的锦囊, 就像一个小仓库一样放东西的, 通常在计算机里面叫做 数据(data)
另外一个里面有指示别人如何做事情的 锦囊通常 是指令, 就是以前说的指令
那么一堆锦囊, 我们可以粗略分为指令类型锦囊, 数据类型锦囊, 通常在计算机里面 都称呼 指令类型锦囊为指令, 数据类型锦囊为数据
由于计算机程序是由一系列锦囊构成的, 而锦囊是由 指令锦囊和数据锦囊共同构成因此我们有下面公式
计算机程序(一堆锦囊) = 指令(指令锦囊) + 数据(数据锦囊)
四. 数据类型
什么是数据类型, 为什么要有数据类型? 还是看我们前面举的一个例子
前面多次提到多个线程 共同访问一个储物柜的情况。 当多个人共同访问一个储物柜时, 若是甲放兔子到储物柜,乙若是放条狗到储物柜, 那么发生什么??
储物柜, 和装着豆子的锦囊都是一个共同的东西, 他都可以存储数据,存储东西。
因此可以得出一个结论, 相同类别的东西才能放到一起, 否则可能有悲剧发生的。
也就是说,要把数据锦囊按照里面存储东西的不同划分为若干类别, 然后放东西时,相同类别的东西放到相同类别的柜子里面,这样才稳妥。
这个数据锦囊的类别就是数据类型。 常见的数据类型有数值型, 字符串型,逻辑型,对象型等等, 不同计算机语言有不同的类型分类,以后等到了具体的计算机语言时自然会谈起。
五. 数据变量
前面提到了储物柜和放豆子的锦囊等,这些一个特点是某个特定数据类型下的一个具体的东西。含义是
1. 它属于一个特定类型
2. 这个特定类型下可以有很多个同这个“它”相似的其他,就是这个它不是唯一的
3. 这个东西可以把特定类型的东西放到这个里面
4. 这个东西是一个具体的实例,特别注意这个“具体”的实例。
那么这个具体,属于一个特定类型的, 可以被放东西的实例就是一个变量,或者数据变量。
为什么叫做变量, 因为里面的东西是可以变化的, 例如今天储物柜里面放了白兔, 后天可能放黑兔子,尽管都是兔子但是 可能不同, 随着时间变化是发生变化的, 因此有个变字。
变量另一个字是“量”, 其实计算机里面存储的任何东西都是数值,数量等等都是数,一切都是数因此才有个量的字。
这里仅仅是个人的理解, 并且是为了让大家便于弄明白的理解方法, 不做学术上的严谨概念。
六. 数据类型和变量
数据类型是一个类型变量的全体的特征的总称, 他可以概括这个一些相同特征的变量,包括这些变量如何操作, 能做什么, 例如,兔子类型可以跑, 胡萝卜类型可以吃,毒蘑菇类型不能吃等等。
变量是, 数据类型下的一个 具体的, 特定的, 个体。里面可以放东西。
问题1, 变量类型(也可以是数据类型)里面可以放东西吗?
回答, 不能, 变量类型是个 抽象的概念, 不是具体的地点, 物体等, 在说的通俗点他 不是容器。因此不能放东西。
问题2,变量能放东西吗?
回答, 变量其实是个容器, 他是专门放置东西的, 因此他必须能放东西。 但是变量必然属于一个类型, 否则乱放东西就有大麻烦了!
相关文章