首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务队列并发

任务队列并发
EN

Stack Overflow用户
提问于 2018-08-04 02:39:26
回答 2查看 89关注 0票数 0

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

但这里有一个问题。如果一个工作人员在锁定任务时杀死或挂起任务,则不会执行该任务。我真的很麻烦。

有人能解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-04 13:48:45

在工作人员执行的任务框架良好的情况下,明智的做法是根据临时锁的思想使用软互斥

这意味着,如果工作人员需要大约60秒才能完成任务,那么工作人员将锁定任务一段安全的时间(例如10分钟)。请求(和锁定)锁的时间作为锁的一部分保存。

每当工作人员请求锁定任务时,它都会检查:如果现在的时间晚于最后一个锁的时间10分钟,则该工作人员“窃取”该锁并更新到现在的时间。

这就创建了一种机制,在这种机制中,工作人员可以被杀死,但不会永远锁定任务。

票数 1
EN

Stack Overflow用户

发布于 2018-08-04 03:29:22

一旦任务即将锁定到某个工作人员,您必须使用一些逻辑向该任务添加一个唯一的标识号,该标识号与其当前工作人员一起描述其自身。

然后,您需要以循环的方式对每个员工进行一些轮询,即worker 2worker 1的投票、worker 3worker 2的投票和worker 1worker 3的投票。

因此,当worker 1关闭时,worker 2会在轮询期间理解并获取worker 1的任务。您还需要维护一个manager worker,它负责分配和维护任务映射到各自工作人员的表。

这只是基本的想法。你还需要处理如下的事情:

  • 如果manager worker坏了怎么办?

在这里,您必须使用token ring方法,也就是说,持有令牌的工作人员是经理。一旦manager worker死了,就必须使用一个election algorithm为现有的工作人员分配一个新的令牌。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51681959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档