停下来,再接着做
每次切换都把做到哪儿了存下来,再读回去。
停下来的时候先记一笔
想象你正在桌前做事,突然有别的事需要你处理。
要是直接起身走开,回来的时候就想不起做到哪儿了。所以你先写一张小纸条,记上"做到这里了",然后再离开。
等你回来,看一眼纸条,就能从停下的地方接着做。CPU也是这么做的。它暂停一个任务的时候,会把当前状态整个存下来,就像那张纸条;回来的时候再把它读回去。
离开前把状态记下来,回来照着接着做。
任务暂停时把状态存起来,恢复时再把状态读回来。
把切换的那一瞬间放慢
我们把作业切换的那一小段时间放慢来看。
一开始作业A在跑。到了该切换的时候,先把A的状态存下来。然后把作业B之前存好的状态读回来。这时候B才开始跑。
关键在于:存和读的这中间一段时间里,A和B都没法干活。那一段纯粹是"换位子"花掉的时间。
保存和恢复之间,没有任何作业在推进。
切换分保存和恢复两步,中间这段时间什么都没推进。
换得越勤越吃亏
每次切换都要花一点代价,就是写纸条再读回来的那点时间。
用下面的滑块调一调,同样的一秒里作业切换几次。切换次数一多,"换位子"的时间就跟着多,真正干活的时间就少了。
换得太少,一个作业霸着位子太久;换得太勤,光顾着换都没空干活。所以得有个合适的平衡。
拖动滑块,看看切换代价怎么吃掉干活的时间。
切换不是免费的,换得太勤就会吃掉能干活的时间。
同样的时间,不一样的结果
拿同样多的时间,把两种做法并排放。
左边只是偶尔换。花在换位子上的格子少,干活的格子就多。右边换得很勤。每个格子里都掺进了换的代价,真正干活的格子反而少。
两边流过的时间一样多,可做完一看,处理的量不一样。造成差别的不是活儿的多少,而是换来换去扔掉的时间。
两行一样长,但换得勤的那行干活格子更少。
切换一勤,同样的时间能真正处理的量就变少了。
一页纸总结
记住三点就够了。
第一,纸条就是状态。作业暂停的时候,把到目前为止的进度整个存下来,这就是留纸条。
第二,换,就是存下来再读回去这两个动作。中间什么作业都没在跑。第三,所以换得太勤会吃亏。换的时间一攒起来,能干活的时间就少了。
纸条是状态,换是保存和恢复,太勤就吃亏。