单生产者单消费者模式
生产者消费者模型是一个经典的问题,其主要有3部分构成:生产者、阻塞队列和消费者。如下图所示:
生产者消费者模式,可以在一定程度上面做到程序之间的模块解耦。但是还有一个主要的特性,就是它可以通过阻塞队列来协调生产者和消费者的处理速率不同的问题。下面给出一个简单的Demo:
PCData:用于传输的数据
Producer:生产者
Customer:消费者
然后调用测试类如下:
多生产者多消费者模式
在我们日常的使用过程中,有可能在基础的使用场景之上有些调整。以上面单生产者单消费者为例,生产者和消费者线程使用的是同一个线程池。此时,如果想要更大程度上的隔离生产与制造之间的关系,可以将其分别在不同的线程池中处理。
通常情况下,如果有多个生产者的时候,我们有可能更多的考虑的是如何更快速的去消费数据。当有多个消费者的时候,可以参考下面结构:
对于消费者而言,直接对接阻塞队列的是一个分发任务的消费者。这个前端的消费通过Hash,将数据包分发到不同的子消费者当中去。在这些子消费者中,如果有消费不了的任务,则可以将数据回推到父级,然后由父级重新分配任务。