seegongsik
操作系统

什么是上下文切换

每次换做别的事,电脑都会记下做到了哪里,回来时再把这张便条读回来。轮流干活的背后,就是这张小小的便条。

01

停下时留张便条

假设你在桌前干活,突然得去做别的事。要是直接起身走开,回来时就想不起做到哪儿了。
所以离开前先写一张“做到这里”的便条,回来后看着便条,从断开的地方接着做。
电脑也一样。停下手上的工作时,把当前的状态像便条一样整个存起来,回来时再原样读回来。
游戏暂停后再打开,能从原处接着玩,也是因为暂停那一刻的状态被存下来了。

作业A 进行中做到这里了保存恢复回来接着做做到这里了

离开前记下状态,回来后原样接着做。

工作停下时保存状态,回来时恢复那个状态。

02

把切换的瞬间放慢看

来把切换工作的那一小会儿放慢看看。
先是工作 A 在运行。到了该换的时候,先保存 A 的状态,再读回工作 B 之前存下的状态,这时 B 才开始运行。
要紧的是,在保存和读回之间,A 和 B 都干不了活。这段时间纯粹用来换位置。
保存完了才能开始恢复,所以这段空档跳不过去。

这中间没作业在跑作业A保存A状态恢复B状态作业B

在保存和恢复之间,哪项工作都没有进展。

切换分保存和恢复两步,中间什么也不进行。

03

换得越勤越吃亏

切换总要付出一点代价,就是写便条、再读便条的那段时间。
用下面的滑块,调一调同样 1 秒钟里要换几次工作。换的次数越多,换位置的时间就越长,真正干活的时间就越短。
换得太少,一项工作会占着位置太久;换得太勤,又忙着换而干不了活。所以需要恰当的平衡。
程序开得太多时电脑变慢,原因之一也是切换花的时间越积越多。

每秒切换次数6
真正干活的时间 82%换位子的时间 18%
合适的平衡。换得太少,一个作业霸着位子;换得太勤,光顾着换都没空干活。

拖动滑块,看看切换的代价把干活的时间削掉了多少。

切换不是免费的,换得太勤,干活的时间就会被削掉。

04

同样的时间,不同的结果

在完全相同的时间里,把两种做法并排看看。
左边只是偶尔换一下,用来换位置的格子少,干活的格子就多。右边换得很勤,每格都夹着切换的代价,真正干了活的格子就少。
两边流过的时间一样,结束时处理的量却不同。造成差别的不是活儿的多少,而是浪费在切换上的时间。
就像人在好几件事之间来回跑,光是忙,真正做完的却很少。

偶尔换
干活 10 · 换 2
换得很勤
干活 6 · 换 6
干活格 换的格

两行一样长,但换得勤的那一行,干活的格子少。

切换一频繁,花同样的时间,实际处理的量也会变少。

05

用一张纸总结

只要记住三点。
第一,便条就是状态。工作停下时,把到目前为止的进度整个存起来,这就是留便条。
第二,切换就是保存和读回这两个动作,中间任何工作都不会推进。第三,所以换得太勤就吃亏,因为切换的时间越积越多,真正干活的时间就少了。
说到底,用唯一的干活的做好多件事,秘诀就是切换;而把切换做得恰到好处,就是窍门。

一
纸条就是状态。停下时把到目前为止的进度整个存下来。
二
换,就是存下来再读回去两个动作。中间什么都没在跑。
三
所以换得太勤会吃亏。换的时间一攒起来,干活的时间就少了。

便条就是状态,切换就是保存和恢复,太勤就吃亏。

一句话总结切换就是保存和恢复状态;它不是免费的,所以要做得恰到好处。
← 操作系统
如果有帮助,请支持我们