打字猴:1.700495707e+09
1700495707
1700495708 谚语
1700495709
1700495710 种树最好的时间要么是20年前,要么就趁现在。
1700495711
1700495712 到目前为止,我们只考虑了使调度变得更加困难的因素。但有一个转折可以使它更容易:能够中途停止一个任务的执行切换到另一个任务。“抢占”这个属性最后会戏剧性地改变整个游戏。
1700495713
1700495714 如果有些任务不能在一个特定的时间开始,那么将最大延迟(为咖啡店的顾客服务)或完工时间(为了快速缩短你的待办事项列表)最小化都越过了难解性那条线。但一旦允许抢占,那就还有其他高效的解决方案。在这两种情况下,经典的策略——最早到期日和最短加工时间,只要进行一个相当简单的修改,就是表现最好的。当任务开始时,将该任务与正在进行的任务进行比较。如果你运用最早到期日原则,新的任务甚至比现在的任务截止日期更早,那么就转换档位,否则它将停滞不前。同样,如果你运用最短加工时间原则,新的任务可以完成的比目前的任务更快,那么先暂停处理这一个,否则就继续你正在做的事情。
1700495715
1700495716 现在,如果一周的生意好,一家机械工厂可能会知道在接下来的几天里他们所期望的一切,但是我们大多数人通常都是盲目的,至少部分人是这样。例如,我们可能不确定我们何时才能启动一个特定的项目。(某人会就某个问题给我一个确定的答案吗?)在任何时候,我们的电话或电子邮件都可能弹出一个新任务的消息,添加到我们的原议程之中。
1700495717
1700495718 事实证明,即使你不知道什么时候会开始工作,最早到期日和最短加工时间仍然是最佳的策略,这能够保证你在面对不确定性时表现出最佳状态(平均来说)。如果在不可预知的时刻,你的桌子上突然出现一堆任务,最小化最大延迟仍然是最早到期日的抢先版最佳策略——如果新来的任务比手头上的截止日期更早的话,那就转而执行这一新任务,如果不是就忽略它。同样,最短加工时间的抢先版策略(比较当前任务的剩余完成时间和完成新任务所需要的时间)仍然是最小化完成总时间的最佳方法。
1700495719
1700495720 事实上,在面对不确定性时,最短加工时间的加权版本是一种最通用的调度策略。它提供了一个简单的时间管理方法:每接到一件新工作时,通过其将耗费的时间来对其进行重要性的划分。如果该重要性高于当前正在执行的任务,就切换到新任务,不然就坚持当前任务。该算法是调度理论最接近“万能钥匙”的地方,最佳策略并不只是为了解决一个问题,而是许多问题。在一定条件下它所要最小化的并不只是加权完工时间的总和,如我们所期待的,也是超期任务的权值以及这些任务的加权超时数的总和。
1700495721
1700495722 有趣的是,如果我们提前知道任务的开始时间和持续时间,想要优化所有其他的指标也都是难解的。所以,调度不确定性的影响揭示了一些违反直觉的东西:在有些情况下,透视是一种负担。即使拥有完全的预知,寻找完美的调度计划实际上也许也是不可能的。相比之下,驻足思考,工作来时反应灵敏,也许不能给你想象中完美的调度执行,但这是你可以做的最好的一件事,也最容易计算。这会带来一些安慰。作为商业作家和编码员的杰森·弗瑞德曾说:“直到做出一个万能计划,你才会继续吗?用‘猜测’代替‘计划’,并放轻松。”当未来充满迷雾的时候,原来你不需要日程表,只需要一个待办事项清单。
1700495723
1700495724
1700495725
1700495726
1700495727 算法之美:指导工作与生活的算法 [:1700494151]
1700495728 算法之美:指导工作与生活的算法 抢占并不是随意的:关联转换
1700495729
1700495730 谚语
1700495731
1700495732 走的越急,就落得越远。
1700495733
1700495734 埃伦·厄尔曼
1700495735
1700495736 程序员不说话,因为他们不能被打断……与其他人同步(电话、蜂鸣器和门铃)只能意味着打断思路。中断就意味着会发生一些错误。你不能中途下车。
1700495737
1700495738 所以,调度理论还是告诉人们一个合理而又鼓舞人心的道理。解决许多调度问题时,有最简单和最优算法,而要解决的这些问题都已经非常接近我们在日常生活中遇到的情况。但是,在现实世界中,当涉及实际操作的单机调度问题时,事情就会变得复杂。
1700495739
1700495740 首先,人们和计算机操作系统都面临着一个奇怪的挑战:正在进行调度的机器和将要进行计划的机器是同一个。要想理顺你的待办事项清单上的项目,需要你的待办事项列表本身进行优先处理和调度。
1700495741
1700495742 其次,抢占也不是随意的。每当你转换任务时,你都要付出代价,这在计算机科学领域被称为上下文切换。当计算机处理器把注意力从给定的程序上转移时,总要付出一定的代价。它需要有效地标记该任务的位置,并将其所有相关信息放置一边,然后找出它下一步运行的程序。之后,必须取得该程序的所有相关信息,找到它在代码中的位置,最后进入该档位。
1700495743
1700495744 这种来回切换并不是“真正的工作”,也就是说它们都没有实际提高计算机所切换的程序的状态。这是无用功,每一次上下文切换都在浪费时间。
1700495745
1700495746 人类在上下文切换时也会付出代价。对于这一点,我们在以下时刻会有所体会,我们将办公桌上的文件拿来又拿走,电脑上的文件关闭又打开,走进房间却不记得我们要来做什么,甚至我们会大喊:“我在哪里?”“我在说什么?”心理学家的研究表明,对于我们来说,任务切换的影响可以包括延迟和错误,影响时间会是几分钟而不是几微秒。任何一个人,如果你在一小时内被中断几次,那么你就有这一个小时什么都做不成的危险。
1700495747
1700495748 就个人而言,我们已经发现,编程和写作需要考虑整个系统的状态,所以其进行切换的成本就非常大。我的一位编程的朋友说,正常的一周工作时间不适合他的工作,因为对他来说,一天工作16小时的效率是每天8小时的两倍多。对于布瑞恩来说,他认为写作是一种锻造。金属在具有可塑性之前都要一段时间来加热。他发现,写不到90分钟就不会有什么成果,因为前半个小时几乎出不了成果,除了将“我在做什么?”这个大问题装进他的大脑。匹兹堡大学的调度专家柯克·普鲁斯,也有同样的经历。“如果只有不到一个小时是时间,我就去做些简单的小差事,因为我要花35分钟才能真正弄清楚我想做什么,然后我可能就没有时间去做这件事了。”
1700495749
1700495750 英国作家吉卜林在其1910年创作的著名的诗《如果》最后高度呼吁对时间的管理:“如果你能惜时如金,那就利用每一分钟不可追回的光阴……”
1700495751
1700495752 真希望是这样。但事实是,我们总会将大量时间花在无用的工作上,比如考虑如何记账和任务管理。这是调度的基本权衡之一。你承担的越多,花费的时间就越多。在极端的噩梦中,这变成一个被称为颠簸的现象。
1700495753
1700495754
1700495755
1700495756
[ 上一页 ]  [ :1.700495707e+09 ]  [ 下一页 ]