多个用户将任务添加到队列的最佳任务处理算法是什么?

What is best task processing algorithm where multiple users adds tasks to queue?

我正在设计一个系统,其中多个用户将向 table 添加任务,每个任务消耗相同的时间。我目前使用的是 FIFO 系统,但是当用户一次性添加数百个任务时会出现问题。这会导致任务数量较少的其他用户出现延迟。

请提出算法以使队列中的每个用户获得相等的处理时间。

我通常这样做:

  • 与其将任务直接放入工作队列,不如为每个用户创建一个单独的任务队列。每个请求将一个任务放入其用户队列中,当用户队列由空变为非空时,将用户队列放入全局工作队列

  • 工作人员在准备好进行更多工作时从工作队列中取出用户队列。当一个worker拿走一个用户队列时,它会取出第一个任务,如果它不为空,worker会立即将用户队列放回工作队列的末尾。然后工人执行任务。

使用此系统,每个用户队列最多在工作队列中出现一次,所有具有关联工作的用户在工作队列中均等表示

这很容易实现,但是您必须小心检测何时必须将用户队列放入工作队列,因为可能有两个线程同时做出此决定,并且您不希望用户队列进入两次。

我这样简单:

  • 在每个用户队列中都有一个原子布尔值,用于跟踪它是否在工作队列中。工作人员在用户队列出列后立即将其设置为 false。如果有人发现用户队列非空,他们可以尝试将此布尔值 CAS 为真,如果成功则将用户队列放入工作队列。

  • 当工作队列为空时,用户队列进入工作队列的可能性很小。确保这是无害的——如果一个工作人员未能从用户队列中获取任务,它应该忘记它并从工作队列中获取一个新的用户队列。