求支持多生产者多消费者且每条数据被所有消费者读取的并发数据结构
符合需求的数据结构:广播队列(Broadcast Queue)
存在完全匹配你需求的已知数据结构,这类结构通常被称为广播队列(Broadcast Queue)或多播队列(Multicast Queue),部分实现也会被归类为带消费者确认的MPMC队列。
它的核心特性完全契合你的约束:
- 支持多生产者并发写入数据
- 支持多消费者并发读取数据
- 每条数据会被所有消费者至少读取一次,只有当所有消费者都确认读取完成这条数据后,它才会被队列清理丢弃
- 允许消费者之间的读取进度不一致(比如部分消费者先处理后续数据,其他消费者仍在处理前面的数据),只要最终每条数据都被所有消费者处理完毕即可
常见的实现思路包括:
- 为队列中的每条数据维护一个计数器,记录已完成读取的消费者数量,当计数器达到消费者总数时,自动删除该数据
- 为每个消费者维护独立的读取偏移指针,队列保留所有未被全量消费的数据,直到所有消费者的偏移都超过该数据的位置后再进行清理
内容的提问来源于stack exchange,提问作者HyunWoo Lee
相关产品推荐
相关产品推荐

