阻塞队列被异步消费如何保证消费顺序

淩亂°似流年 2024-02-17 10:45 144阅读 0赞

阻塞队列被异步消费如何保证消费顺序

    1. 阻塞队列的特性
    1. 维护的两个队列
    1. 阻塞队列的消费过程

1. 阻塞队列的特性

首先阻塞队列本身是一个符合FIFO特性的队列,也就是说存储进去的元素是符合先进先出的规则。

在这里插入图片描述

2. 维护的两个队列

其次在阻塞队列里面,使用了一个condition条件等待来维护了两个等待队列,一个是队列为空的时候,存储被阻塞的消费者,另一个是队列满了的时候,存储被阻塞的生产者。并且存储在等待队列里面的线程是一个符合FIFO特性的一个链表。

3. 阻塞队列的消费过程

最后对于阻塞队列的消费过程,有两种情况。

第一种是阻塞队列里面已经包含了很多任务,这个时候启动多个消费者线程去消费的时候,它的有序性保证是通过加锁来实现的。也就是说每个消费者线程去阻塞队列里面获取任务的时候必须先要去获得排他锁

第二种如果有多个消费者线程,因为阻塞队列里面没有任务而阻塞,这个时候这些线程是按照FIFO的一个顺序存储到了一个condition条件等待队列里面的。当阻塞队列里面开始有任务要处理的时候,那么这些阻塞的消费者线程会严格按照FIFO的一个顺序被唤醒。从而保证了消费者对于任务的处理顺序。

参考资料:阻塞队列被异步消费如何保证消费顺序

发表评论

表情:
评论列表 (有 0 条评论,144人围观)

还没有评论,来说两句吧...

相关阅读

    相关 如何保证消息不重复消费?

    消息被重复消费,就是消费方多次接受到了同一条消息。根本原因就是,第一次消费完之后,消费方给 MQ 确认已消费的反馈,MQ 没有成功接受。比如网络原因、MQ 重启等。 所以 M