双抓取,调度算法和洋葱圈

2020-12-11 07:58:53

大多数人都认为我为此感到疯狂,但是我度过了假期的最后几个月,在一家家庭式快餐店当短期厨师。 (这里有更多信息。)我是一名行业程序员,所以我很乐意从程序员的角度考虑餐厅的系统。这是关于两个这样的系统的一些想法。

乍一看,人的系统可能看起来很破损,但是由于人为因素的影响,它们实际上可能工作得很好。

我最好的例子是接受和履行订单的系统。我们从不写下任何东西,并且会多次要求订单,包括在吸引客户时。 (在计算机安全性方面,这被称为“双重获取”。)服务不是很好,并且从理论上讲可以让客户撒谎并减少支付。

实际上,大多数客户不太介意,骗子很少,我们可以轻松地发现订单出现问题的时间。

写下订单并严格要求一次似乎是最佳选择,但存在细微的缺陷。一方面,柜台后面没有足够的空间让每个人都能走到书面订单,因此需要更多的内部沟通。如果您在订单明细中受阻,而同事却忙于提问,这将无法解决。客户总是闲着;同事不是。

如果在完成订单时不扔掉订单单,可能会增加混乱,如果戴着油腻的手套并且想避免接触笔和食物,那么这在逻辑上(字面上)也会很混乱。最后,我的许多同事都比较老,非常习惯现有系统。向新系统的重大过渡会带来比其价值更大的混乱。

我负责收银机,奶昔机和烧烤炉等一系列工作,但我在油炸锅上花费了最多的时间。从程序员的角度,我很高兴地介绍这种对炒菜锅的生活的过度分析。

这张照片有2个油炸锅,每个都有2个篮子,可以浸没在下面的热油桶中。在工作中,任何一天只有一个油炸锅处于活动状态,这实际上允许同时油炸2个项目。

油炸厨师与操作系统有很多共同之处,因为它们都负责调度。操作系统将线程调度为在有限数量的内核上运行;炸锅厨师计划在有限数量的炸锅中油炸食物。不同的食物有不同的优先级,并且烹饪时间也不同。

法式炸薯条,卷曲的炸薯条和洋葱圈(统称为“炸薯条”)是油炸锅的主要菜单项。每个炸薯条的大小都可以大或小(只有大的圆环除外),并且可以吃或吃。油炸厨师的工作是:

将它们放在柜台上客户的托盘或待办事项包上

我们的目标是以最大的速度和准确性来做到这一点,而又不会下订单。理想情况下,您可以最大程度地减少向客户和同事询问订单详细信息的次数。此外,还有一些复杂性需要处理:

信息不完整:根据问候者的不同,他们可能会忘记指定是进餐还是进餐。您可以随时询问客户,但是烧烤厨师可能会稍作询问。您可能可以保存客户询问,是否可以窃听该交互。

时间要求:您需要在烧烤厨师煮完汉堡/热狗之前完成订单,但不要太早完成。如果您在准备汉堡之前将炸薯条放在柜台上,它们会变冷。这对于待办订单而言意义不大,您可以立即将其放入袋中。

规模:在高峰期,您每分钟可能会收到很多订单,而每分钟只能处理1-2个订单。迎宾员下达命令后,他们便会忘记该命令,因此您要记住。记住:不要写下来。

避免浪费:有时您或另一位厨师会做太多的薯条。为避免浪费它们,您可以将多余的部分用于以后的订单,方法是稍后用刷新来刷新它们,并将它们添加到新批次中。

更改订单:客户有时会在您开始做饭后更改他们的订单(例如,将普通炸薯条换成卷曲炸薯条)。现在,您必须弄清楚如何处理当前油炸锅中的部分煮熟的部分。

杂项:除了炸薯条外,还需要安排其他时间在炸锅中烹饪,包括鸡肉馅饼,培根,蛤c条和鱼片。

一起批处理订单。如果队列中有大大小小的鱼苗订单,则可以同时在同一篮子中烹制它们。一些顾客要求炸薯条“做得好”,这意味着煮的时间更长。这使批处理更加复杂。

“等待飞溅”:如果在剩下的烧烤物品之前就完成了油炸命令,并且没有需要油炸时间的紧迫物品,则可以从油中提起篮子,但将食物留在里面。烧烤物品完成后,您可以将食物快速倒回油中以使其刷新,然后上菜。这样可以防止它在柜台上变冷。

不活动的炸锅篮:可以方便地为熟食提供额外的存储空间。如果您有一个“等待n飞溅”的订单正在等待,但是您有更多的要炸的订单,则可以使用非活动炸锅中的2个备用篮来存储等待的订单并腾出炸锅插槽。当客户更改订单并需要将半熟部分快速存放在某个地方并开始调整后的订单时,这也很有用。

“钳子蘸料”:如果两个炸锅都在使用,并且烧烤厨师将培根交给您紧急煮熟,则可以将培根放在钳子中,然后浸入一个浸没的篮子中。这样一来,您可以有效地同时烹饪两件事。

这是我最终使用的系统。接到新订单时,我会停止做任何事情,拿起合适的容器,然后将其放入相应的油炸桶中。这捕获了有关订单的所有3条信息(油炸类型,大小,待运?),让我忘记了。如果严格遵守此规则,我可以像处理队列一样处理存储桶中的容器。但是,由于该系统无法捕获全局订单,因此我仍然需要保持一定的顺序感-如果在炸锅,卷发炸锅和洋葱圈桶中有容器,则无法确定先到哪个顺序。

我对此没有解决方案。在非常忙碌的一天,这个系统崩溃了,我下订单了。这样的极端负载只发生了几次,在这种情况下,我只生产了大批产品,却忘记了与烧烤物品同步,并希望最后我不会有太多多余的东西。通常,该系统运行良好。

从程序员的角度考虑人的系统(例如餐厅中的人系统)很有趣。油炸厨师的工作与操作系统调度程序非常相似,并带有优化点和边缘案例。人们可以尝试像计算机系统一样优化人类系统,但是在评估改进时,了解系统的微妙的人类方面至关重要。

您从这篇文章中学到了什么吗?我很想听听它是什么-鸣叫我@offlinemark!

如果您想知道何时撰写新帖子,我也有一个邮件列表: