现在,我有一个队列,有多个生产者和单个消费者。
消费者线程操作缓慢。此外,消费者通过 peek 操作从队列中取出元素,并且在消费操作完成之前,无法从队列中删除该元素。这是因为生产者线程作为辅助操作还会拍摄当时未完全处理的所有元素的快照。
现在,我想更改我的代码以支持多个消费者。因此,假设我有三个线程,一个线程将获取第一个元素,可以通过查看操作读取该元素。
第二个消费者线程可以获取第二个元素,但我无法检索它,因为队列不支持检索第二个元素。
因此,使用标准 ConcurrentLinkedQueue(我现在正在使用)的选项已经消失。
我正在考虑使用优先级队列,但随后我必须将每个元素与一个标志关联起来,该标志告诉我该元素是否已被某个线程使用。
哪种数据结构最适合解决这个问题?
听起来你真的应该有两个队列:
消费者将自动(通过锁)从未处理的队列中拉出并添加到正在进行的队列中。这样多个消费者可以同时工作......但生产者仍然可以拍摄快照both需要时排队。当消费者完成任务时,会将其从正在进行的队列中删除。 (这实际上并不需要是一个队列,因为没有任何东西可以从队列中“拉出”。只是一些您可以轻松添加和删除的集合。)
鉴于您需要锁定来使传输原子化,您可能不需要底层队列是并发队列 - 您将已经保护所有共享访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)