前言
在 Java 中有一种常见的多线程编程模型,生产者/消费者模型,它在分布式的系统也同样常见。它们大致的角色责任可以理解如下:生产者生产一批数据放到缓冲区中,然后重复生产过程。同样,消费者也在缓冲区消费这批数据,如下图。
问题推导
因为生产者跟消费者往往都是独立线程,所以这里有个有个多线程同步的问题,如生产者生产速度较快,但消费者消费速度跟不上,那么生产者就需要等待消费者处理完,才能继续生产数据。相反如果消费者的消费速度大于生产速度,那么消费者就需要等待生产者。
该问题的关键就是要保证生产者不会在缓冲区溢出时生产数据,同样消费者也不会在缓冲区中无数据写入时消费数据。