producer consumer pattern

Producer-Consumer Pattern — a fundamental concurrency pattern where producer threads generate data and consumer threads process it, communicating through a shared buffer.

Architecture

[Producer 1] →→
[Producer 2] →→  [Shared Buffer/Queue]  →→ [Consumer 1]
[Producer 3] →→                          →→ [Consumer 2]

Bounded Buffer Implementation

  • Fixed-size queue (ring buffer) between producers and consumers
  • Producers block when buffer is full (back-pressure)
  • Consumers block when buffer is empty (no work)
  • Synchronization: Mutex + two condition variables (not_full, not_empty)

Benefits

  • Decoupling: Producers and consumers run at different speeds
  • Buffering: Absorbs bursts in production/consumption rates
  • Scalability: Add producers or consumers independently

Lock-Free Variants

  • SPSC (Single-Producer Single-Consumer): Ring buffer with atomic head/tail pointers — no locks needed. Fastest option when topology matches
  • MPMC (Multi-Producer Multi-Consumer): More complex, often uses CAS. Examples: Java ConcurrentLinkedQueue, Disruptor

Common Applications

  • Web server: Accept thread (producer) → request queue → worker threads (consumers)
  • Pipeline processing: Each stage is consumer of previous, producer for next
  • Logging: Application threads produce log entries → log writer consumes

Producer-consumer is ubiquitous — it appears in virtually every concurrent system from operating systems to web servers.

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account