delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

12 Dec 2006

写给无数的deadline

有数学老师说,不要等到期末再写学期作业,因为那时候你们会很忙……于是牢记在心,现在看来,果然如此。

最近几周一直处于一种非常忙碌的状态。回想起来自己都觉得诧异,居然这么短的时间做了这么多的事情。周一到周日,看看自己写到手机里的日程安排和行程记录(),要应付如此多的事情,每一件事情都有自己的优先级、deadline等等。很多事情无暇顾及,也有些事情是一拖再拖,最近的情绪也不是很稳定,有时候为一点小事差点爆豆,于是赶紧去洗手间洗把脸,等等。

从最近几周的经历,我认为需要总结的几点,其实也是OS里面经常用到的一些规则:

* 在时间紧、任务急的时候,没有特殊情况绝对不能随便打乱或更改计划。例如,在确保足够的运动时间的同时,必须精确地计算花费的时间,并提前做出安排。安排时间其实和写操作系统的调度器一样,永远记住,抢占式调度改善的是响应时间,而不是单位时间的吞吐量,正如自旋互斥元之于休眠互斥元一样。

* 依据优先级,而不是deadline安排时间。第一,你早该知道deadline是什么,指定优先级参量(nice值)跟安排时间的时候就应该留出富裕(prefork);第二,即便deadline临近,低优先级的事情也不能抢断高优先级任务,就好像发生突发断电时,显示器I/O要给磁盘回写让路一样。

* 不打没有准备的仗。如果知道一件事一定或者有很大概率会发生,那么就应该早做些准备。比如零星地做一些资料收集这类不需要很长时间,但积累起来却很有用的事情。遇到任何事情绝对不能慌。比如FreeBSD的VM系统中,系统会在后台缓慢地刷些零页儿出来,并将vnode cache中不经常访问的放入「可释放」队列,而不是直接淘汰掉。这样做在I/O压力(耗时性工作压力)大的时候,能够省下不少时间,从而提高系统的吞吐率。

* 有些事情需要一个人在安静的地方很集中精力地做。这个其实道理也很简单,上下文切换这种事情人和机器开销都会很大,如果一件事需要的时间很长,而且需要长时间集中精力地去做(执行占用CPU时间长、内存访问密集),或者需要很多前期准备(调度开销大),那么时间片大一些就能够显著改善性能。

* 时间允许的前提下优先保证有效睡眠和休息。好的操作系统在不忙的时候运行休眠进程,人也是一样的,良好的休息和生活习惯有助于提高工作效率。

不过,我还是觉得,忙过这两天说什么也得好好休息一下了,争取周四周五吧。