前面讲霸哥(bug)是如何产生的时候,提到了时序变化是bug产生的主要原因之一。当时没有展开讲,很多同学私信来问,什么时序?时序是如何变化的?这节课,微米老师就好好给同学们白话一下。。。。
时序指的是时间的先后顺序 。
在计算机编程中,好多事情都是有先后时间要求的,比如要先登录,才能进行账户操作;就像4X100接力赛,后一个接力的同学必须拿到接力棒才能起跑,不然就违规了。
除此之外,时序还有一个隐藏的特性“时效”,即除了做事情的先后顺序外,每样事情必须在限定的时间内完成。“执行先后”+“执行时效”,合起来就是时序控制。
时序控制分两大类,一类的是开环的,一类是闭环的。
开环的比较好理解,各自按照设定好的起止时间工作,相互之间没有交互。比如一件事情顺序分为A/B/C三步,A从0分钟开始,3分钟结束;B从3分钟开始,5分钟结束;C从5分钟开始,6分钟结束。
计算机软件在工作的过程中充斥着此类开环控制,比如读写硬盘;读写的过程中,需要按指定的时序释放读写的地址,读写的长度等信息,否则无法正确读到硬盘中的数据。
再举个简单的例子加深同学们的理解,小明小红小强三个人协作摘苹果。小明负责从树上摘苹果并放到筐里,小红负责将筐搬到车上,小强负责开车将筐送到水果店。假设他们也是开环工作的,严格按照各自的时间进行工作,过程中不做交互;0~30分钟是小明摘苹果的时间,30~35是小红搬运的时间 ,35到60是小强运输的时间。过程中,如果小明被其他事情打断了,比如中间接个电话,上个厕所,那小红搬的就是一个半筐或空筐;如果小红被打断了,那么小强运的就是空车。
讲了开环,那什么是闭环呢?
闭环是顺序执行的每个操作都有一个执行成功与否的标志,后续操作需要判断前一个操作是否执行成功,成功则执行,不成功要么等着,要么重试,要么退出。
再拿小明小红小强三个人协作摘苹果的例子进行讲解。闭环情况下,先后顺序不变,不过小红搬之前会检查筐有没有满,满了再搬;同样的,小强开车前也会检查车上有没有一筐苹果,确保有了再运输。这样经过层层确认,能够保证水果店每次都能收到一整筐苹果。
好了,讲到这里,同学们对时序以及时序控制应该都了解了。接下来,我们讲一下时序变化。
所谓时序变化,是指在不同的条件下,相同操作的执行时间不同。比如读写硬盘的操作,在计算机的不同温度下的执行时间是不一样的,里面牵扯到硬件的一些固有特性,就像热胀冷缩一样,细节这里就不展开了。
还拿摘苹果的例子给同学们类比一下。同样是摘苹果,如果突然下起了雨,那么无论是摘的速度,搬的速度还是运输的速度,都会变慢。如果此时依旧按照原来开环的工作时序进行,大概率水果店每次都收不到苹果。
有细心的同学可能会提出质疑,即使第一次收不到苹果,第二次第三次应该可以。
这位同学很不错,说明理解了时序的概念。从结果上看,水果店还是收到了苹果。不过在计算机的世界里,我要的A,你给的B,这样的影响可能是致命的,差之毫厘谬以千里!
最后,我们再一起过一下本节课的知识点:
本节课先讲了什么是时序,时序指的是时间的先后顺序。
又讲了时序控制,“执行先后”+“执行时效”,合起来就是时序控制。
将时序控制分为了两大类,开环时序控制(无交互的)以及闭环时序控制(有交互反馈的)。
好了,这节课到这里就结束了。
扫码参与评论与作者和更多用户交互