任务队列并发

时间:2018-08-04 02:39:26

标签: algorithm

我有一个任务队列,并且有多个工作人员。 为了实现并发性,工作人员在获取并执行一项任务时将锁定标志插入任务。

但这是一个问题。 如果某个工人在锁定任务时死亡或挂起,则该任务将永远不会执行。 我真的很烦。

谁能解决这个问题?

2 个答案:

答案 0 :(得分:1)

一旦某个任务将被锁定到某个工作程序,则必须使用一些逻辑为该任务添加一个唯一的标识号,该编号描述了其自身及其当前工作程序。

然后,您需要以循环方式对每个工作人员进行一些轮询,即worker 2worker 1进行轮询,worker 3worker 2worker 1进行轮询在worker 3上进行轮询。

因此,当worker 1发生故障时,worker 2会在轮询过程中理解并抓住worker 1的任务。您还需要维护一个manager worker,它负责分配和维护一个映射到其各自工作人员的任务表。

这只是基本想法。您还需要注意以下事项:

  • 如果manager worker掉线了怎么办?

在这里,您必须使用token ring方法,即持有令牌的工作人员是经理。 manager worker死后,必须使用election algorithm向现有工作人员分配新令牌。

答案 1 :(得分:1)

在工作人员执行的任务框架合理的情况下,基于临时锁定的想法,最好使用软互斥锁

表示如果任务完成大约需要60秒,那么该工作者将锁定该任务一段安全的时间(例如10分钟)。 请求(并锁定)锁的时间将保存为锁的一部分。

工作者每次请求锁定任务时,都会检查: 如果现在的时间晚于上次锁定的时间10分钟,则工作人员将“窃取”该锁定并将其更新为现在的时间。

这创建了一种机制,可以杀死工人,但不能永远锁定任务。