在迪斯尼乐园,他们使用一种名为Fastpass的系统为流行的游乐设施制作第二条较短的线.这个想法是你可以在标准线上等待,通常等待超过一个小时,或者你可以得到一个FastPass,它允许你在指定的时间段(通常是几个小时后)回来,只等待10几分钟或更短.您只能使用FastPass一次"等待"一次.
我一直试图找出这个概念背后的队列理论,但我发现的唯一解释是,它旨在让人们脱离困境并做一些能带来额外收入(购物,吃饭等)的事情.
这就是FastPass实施的原因,还是它解决了真正的访问者效率问题?是否有应用类似逻辑的软件应用程序?是否有软件应用应该采用相同的逻辑?
我在软件中实现类似的部分问题是它基于用户选择队列.做到软件中更快的等待周期,我认为这个理论的良好应用将要求应用程序足够聪明,根据他们的需要知道将人们放入哪些队列,而无需最终用户选择.
这是关于积累,而不是队列效率.
Fastpass的工作原理是因为它使队列中的各个项目更有效地"消耗"某些东西.它不是像处理器那样等待指令执行的队列,因为人们在排队等待食物.
对于迪斯尼乐园的人来说,它可以让他们最大限度地享受乐趣.
考虑处理器接受指令.每条指令都在等待在队列中执行,以执行其任务.现在改变它 - 想象每条指令排队等待不执行指令,但要从处理器获取一些东西 - 每次它到达处理器时都会得到金星奖励,它的工作就是积累尽可能多的这些指令尽可能.
Fastpass就像允许指令进入其他地方,到另一个处理器,在那里获得金星,然后返回主处理器从中获取金星.
对于迪斯尼乐园的用户来说,他们有兴趣享受乐趣 - 积累乘车体验.Fastpass允许用户通过较短的线路找到不同的行程,从而实现最大化,因此它们可以在更短的时间内累积更多.
快速传递线显然不会增加给定乘坐队列的总吞吐量,但它确实有助于资源调度和资源分配,其中人员和游乐设施是资源.
就像我说的那样,你不会为所述乘坐创造更多的总吞吐量,但是其他地方可能没有充分利用游乐设施.如果您现在能够乘坐这些游乐设施以及您必须等待的游乐设施,那么您可以提高公园的整体效率.我的意思是最大限度地减少乘客量以下的乘坐量.
如果您的计算机资源闲置,等待执行可能需要很长时间的任务,那么在此期间将此资源用于其他内容是否合理?从这个角度来看很简单.
我尝试过FastPass,这就是我看到它的方式:
假设您乘坐1小时的预计等待时间,如果您去FastPass,您将获得一个指定的时间段,您可以保证立即进入.通常超过1小时.
我们获得了流行游乐设施的FastPasses,在此期间,我们排队了10-15米的队列,允许我们在FastPass虚拟队列中排队并前往3次游乐设施.他们还为一些非常不受欢迎的游乐设施提供了额外的不计其数的FastPasses,如果我们使用那些我们会从更受欢迎的游乐设施中获得一些负载并填补非常不受欢迎的游乐设施.
这是一个比较我们花费的时间与非快速通道选项的图形:
快速通过http://img259.imageshack.us/img259/5173/fastpass.png
在我看来,作为一种有效的排队理论,它允许执行具有较少预期等待时间的资源,同时延迟具有更高预期等待时间的资源.
FastPass基本上使用某种优先级队列来实现非阻塞访问者.他们不阻止,他们不睡觉,他们花钱.它起作用是因为约翰在上午11点使用它,乔在上午11:15(或上午11点01分)使用它.现在,如果每个人都有快速通行证,那么常规线路会更快,而大多数游客会花更多钱购买食物和礼物.对于迪士尼来说,这在某种程度上是理想的效果.
通行证做了一些假设并且有一些限制.它假定快速通行证持有者是少数...如果改变了,他们将不得不在多个游乐设施上通行证,或者快速通行证持有者会花钱而看到常规线上的人很少..适得其反.由于只支持一次乘坐,因此没有两个快速通行证持有人会同时要求同一次乘坐.
现在,考虑到Joe可能会在轮到他之前离开公园,你必须拿出一些访客'futex'来提高系统的效率.如果乔离开,约翰早到,约翰可以骑.此外,约翰会想知道为什么他的快速传球没有通知他他可以提前几分钟骑车.这就是它真正变得有趣的地方,如果乔只是为了从汽车上取一些防晒霜而又回来了怎么办?毕竟,他的回合还有两个小时的路程,除非他前面有200多人离开公园,而他正在阻挡(同时获得防晒霜),这项任务无法中断.因此,在那种情况下,我们将Joe置于某种磁盘睡眠状态,或者睡眠不能被中断或杀死.他没有任何信号,他没有投票,他已经离开了公园.
这是推动实际无锁编程的理论.它与餐饮哲学家的问题一样有趣,实际上更多.
就迪斯尼而言......这不是一个错误,它的一个特点是,人们更倾向于离开公园而更倾向于花钱.
在普通的队列中,你无法真正估计出你的骑行速度.你很紧张,有时会想到放弃这个想法.
使用FastPass,您"知道"驾驶将在精确定义的时间段内完成.你对这种情况发生时"确定"并考虑减少戒烟的时间.你去购物,吃饭,并在需要时返回.您可能会回来,因为您已提前申请乘车并感受到承诺.Joel Spolsky 描述了星巴克排队使用的类似承诺.
所以FastPass对公园和游客来说都是一种便利.游客们更加高兴,公园可以在等待期间更多地出售.
只是良好的社会工程的一个例子.
我认为在某种程度上你可以将它与异步编程模型进行比较.
您要求系统执行操作,稍后您将返回结果.
最大的区别在于,您可以指定在完成时调用哪个事件/回调,或者在您准备等待时需要输入等待.我还没有看到一种机制可以告诉你以后回来并保证更低的等待时间.
对我来说,这似乎是一个优先级队列.
首次使用SpeedPass时,可以获得更高的优先级.然后突然离开时general line queue
的SpeedPass在队列更优先.
如果我们同意这是一个优先级队列,那么最明显的软件实现是OS调度
从调度维基文章修改:
在迪斯尼乐园调度主要关注的是:
乘车使用 - 尽可能保持乘坐.
吞吐量 - 每个时间单位完成骑行的人数.
周转时间 - 执行特定骑行的时间量.
等待时间 - 一个人在就绪队列中等待的时间.
响应时间 - 从行排队到生成第一个响应所花费的时间.
公平 - 每个人的平等骑行时间.