介绍了 计算机就是一个执行任务的“人”, 这些人物就是一个个的锦囊(指令)。 这些各种各样的指令混合到一起后形成程序, 为了清晰明确的表明程序绘制了程序的流程图。
本文讨论一下, 什么情况下 曹军会获胜, 什么情况下曹军会失败(这里仅仅是 为说明程序上的一些事情而 杜撰的一下结论和事情, 千万别当真!!)。
首先, 若是诸葛亮亲自指挥大军, 对抗曹军, 那么在什么情况下, 都是曹军失败。
其次, 若是关羽指挥 大军对抗曹军, 需要看曹军是什么人员领军, 若是曹操亲自领军, 估计关羽获胜几率非常低。 若是其他大将领军, 关羽获胜的可能性很大
因此可以看到, 战斗的最终结果只有到这些因素都最终确定了 才能最终确定。 那么什么时候才能真正确定这些结果呢??
我们可以通过下面图形思考一下!
从上面的图中, 可以了解到, 有两个重要的时间点,
第一个时间点, 是获知曹军要来, 然后商讨行动计划的时刻, 在这个时刻有大量的 不确定的 情况, 因此行动计划必须 具有能根据不同情况而变化的能力, 这个就是那个判断的分支。
第二个时间点, 是曹军真正来临了, 两军在城外对战了, 这个时候, 一切不确定因素都确定了, 因此这个时候程序一定沿着一个情况(一个分支)进行下去。
可以在进一步整理一下, 就如下图, 能更清晰些。
通过上面 两幅图, 要重点说明的是:
- 程序的编写是 想象中的事情.... 因此一定存在各种各样的不确定的地方, 因此 要把这些都考虑进去(因此自然会有很多不同情况的分支供将来选择), 这样在 实际执行时, 会根据当时的具体情况执行特定的功能。
- 程序的执行是 实际中(现实中)的事情, 这个时刻 全部的 不确定因素一定都确定了, 否则程序没办法在各个分支中寻找一个,然后执行。
下我们看另外一幅图
这幅图是, 程序实际执行过程中的一个 具体的工作流程。
这个图可以进一步优化为:
其实, 无论多么复杂的 一个程序流程(或者程序), 最后都 可以抽象出一个, 上面简化的执行路线图。 通过上图可以知道
- 程序是一个执行路线, 没有分支(具体的,时间的执行时)
- 执行过程是 从上到下,一个路线向前进行, 没有后退
- 程序执行路线 是有开始 和结束的, 结束后就不在进行了!
这条具体的执行路线, 通常称为线程(thread)。 通俗一点的解释, 就是一条沿着一个路线执行的程序, 通常可以成为线程(这个不是准确的叫法, 这里为了小朋友能理解, 尽量采用了通俗的近似, 随着时间的推移, 程序理解的增多, 可以慢慢理解这些概念)。
下面是对程序的另外一个理解方式
从上图,
- 一个编写好的程序(就是一堆锦囊), 是一个程序, 这个时候程序还没开始执行。
- 把编写好的程序拿来执行, 在进行执行过程中的程序 是一个进程
- 在一个进程中(一个进行中的一堆锦囊), 必然有一个执行路线,这个路线是线程。
- 一个进程中必要有一个线程, 但是也可以有若干条其他执行路线, 后面我们会讨论的
- 另外,一个程序可以被多次执行, 也可以被同时多次执行, 可见通过一个程序可以创建若干个进程的。
本文重点:
1. 编程的时间是 程序执行前, 因此都是预期的(就是不能确定将来真正执行时, 到底要准确执行那个分支或者过程等等),不是真正的!
2. 程序在执行时,一切没有确定的事情都确定了, 因此走那个分支, 那个循环如何走, 就确定了
3. 程序执行是需要一定时间的, 因此程序在执行进行中, 叫做一个进程
4. 线程是 进程中, 一系列锦囊操作的过程,这些过程可以被一条线串起来,并且在执行过程中不确定的事情都确定了, 这个执行路线是可以度量的, 因此把这些 可以用线串连起来的 过程叫做线程!
相关文章