SWIFT电梯好不好?

电脑就是人脑的复刻,这是我大学时学《操作系统》这门课时的感受。最近在复习调度算法,又重拾了这种感觉,他俩太像了,电脑就是模仿人脑的机制制造出来的,但现在我们可以反过来从它身上学习一些优秀的算法,反哺自身(可能早已遗忘的)做事方法。

调度,你就理解成安排吧,大家应该都懂,懂的同学,这一节就直接跳过吧。

我来举个常见的栗子——电梯。据说每个程序员坐电梯的时候都会想电梯调度算法[1],我也不例外……

最简单的调度方法是什么呢?当然是“谁先按的谁先坐”,这个在计算机里叫先来先服务(FCFS-First Come First Serve)算法,不管你是在几楼按的电梯,电梯都是按顺序去接人、送人。你可以想象一下,一个人在 1 楼按了去 20 楼,然后第 2 个人在 2 楼按了去 5 楼,第 3 个人在 21 楼按了要去 1 楼。这时候电梯它首先会跑去 1 楼把第 1 个人送到 20 楼,再跑去 2 楼把第 2 个人送到 5 楼,最后再跑去 21 楼把第 3 个人送到 1楼。

是不是很蠢?它明明可以在送完第 1 个人之后去 21 楼接上第 3 个人,把他送到 1 楼后再去 2 楼接第 2 个人,这一下子能省多少电费啊!

所以有了第二种调度算法:最短寻找楼层时间优先(SSTF-Shortest Seek Time First) 算法,用人话说就是优先停到最近的楼层。这样还是刚才那个例子就会如我们所愿,在电梯送第 1 个人到 20 楼之后,就会找到最近的需要停的楼层 21 楼。但是这个算法有一个问题,比如有第 4 个人又在 20 楼按了电梯要下去,但第 5 个人是在 5 楼按的要下去,第 6 个人是在 1 楼按的……以此类推总之都是在低楼层。由于它们第楼层距离都比去 20 楼近,所以第 4 个人好惨,等到天荒地老也等不来电梯……

还有一种调度算法是扫描算法(SCAN),就是电梯不停的从最底层到最高层,再从最高层到最底层,遇到有需要停的地方停就好了,是不是很像我们现在见到的电梯第样子了?还存在什么问题吗?其实还有个小问题,比如高楼层很少人去的话,那么是不是就没必要非要扫描到最高层。所以查找算法(LOOK)就是对它的改进版,当发现当前运行方向之后没有需要停的楼层了,那么就直接改变方向。

其实刚才说的还只是一个电梯的调度,假如这个大楼里每层有 6 部电梯呢,如何最大程度的利用电梯?假如这个大楼 3 楼和 10 楼是最频繁使用电梯的楼层,你有什么办法对特定楼层优化呢?再假如 12 点和 18 点是吃饭下班高峰期,要怎么调度才能最大程度节省人们等电梯的时间呢?……好了,你可以坐电梯的时候想想。

总之现在你对调度应该是理解了。

调度算法和我们有什么关系

我们现在每个人都很忙,每天面对的信息量、要处理的事务都超级多,如何更好地分配任务、管理进度,这都是对我们时间的调度,如何切分目标、规划未来,这些是对我们人生的调度。按理来说电脑是模仿人脑发明的,但我这篇文章却用电脑的机制往人脑上套,有点本末倒置的意思,:) 但是没办法,谁让我只学过计算机科学,没学过脑科学。

接下来我会结合操作系统的调度算法,举的都是现实生活中做事的例子,来看看我们有什么可以借鉴的地方,每个算法都是层层递进的。



}

我要回帖

更多关于 swift别墅电梯 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信