语言是 javascript,但我认为这个问题与语言无关。这是问题所在:
问题
两名服务员为餐桌服务。一个是打扫卫生,一个是放新盘子。服务员必须确保他不会收拾刚放好的盘子。存在这样的要求,即服务员和服务员在小工作单元中执行他们的任务,并且为了让顾客看到他们的食物正在快速送达,服务员必须与服务员同时工作。这是一个低档的自助餐,所以吃完/带走的菜可以再带回来(有人再来点煎饼吗?)
脚步:
- 服务生来了,从桌上的 15 道菜中挑了 5 道菜,带到厨房。
- 服务器来了,在他的订单上放下了 35 道菜中的 5 道新菜。情侣菜(煎饼和蓝莓)和刚拿走的一样,其余都是新菜。
- 这一直持续到 busboy 和 server 都完成。胸围男孩有 15 个盘子需要 3 次处理。服务器有 35 道菜可以带来 7 道菜。
- 之后桌子上剩下什么 35 个盘子。
限制:
- 服务器必须以最接近客户至上的方向工作。
- 胸围男孩必须确保他不会拿走那两盘新鲜的煎饼和蓝莓,如果他在服务器放下新鲜的盘子后进来清理它们 - 就在旧盘子的上面,可能会发生这种情况。
在 javascript 中,我有一个清理 UI 的 setInterval(bust, 50) 函数和一个向 UI 添加新元素的 setInterval(serve, 50)。两个模拟线程同时工作,因为按顺序清理需要 10 秒,而服务它可能需要另外 20 秒。相反,我想让它看起来正在取得进展——尤其是在可见区域。上面提到的板块实际上是 html id,并且正在操作 DOM。我保留了我正在操作的项目的数组/哈希表。
我的算法是什么?
编辑:我记得在图形中,您通常会绘制到隐藏缓冲区,然后用隐藏缓冲区切换可见缓冲区。我不知道如何将这个概念应用于我的问题。这些是数千个 dom 元素,而不是像素。删除元素、丢弃它们并添加新元素可能代价高昂。