CS

[CS] producer-consumer pattern

Dong's Universe 2024. 1. 7. 20:29

producer는 생산하고 consumer는 사용하는 pattern이다.

크게 세가지 경우에서 사용된다.

1. foreground thread latency

2. loadbalance

3. backpressure manangement

 

1. foreground thread latency: IO나 UI 같이 입력을 받아오는 경우 시스템이 과부하되는 것을 막기 위해 queue에 저장하기만 하고 저장된 걸 다른 background threads가 가지고 오게 해서 입력을 받는거에만 집중할 수 있게 한다.

2. loadbalance: thread 간 작업을 공평하게 분배하기 위해서 사용하기도 한다. queue에 쌓인 것을 여유가 있는 thread가 하도록 하는 식으로 진행한다. 즉, 일이 없으면 일을 하는 것이다.

3. backpressure manangement: 만약 producer와 consumer 사이의 queue가 특정 개수만큼 이상으로 못 들어오도록 blocking을 해줄 수도 있다. 그렇게 하지 않으면 그 단계에서만 병목이 일어난다. 하지만 block을 해주면 그 앞의 프로세스들로 전파가 되어서 점진적으로 생산 과정이 느려지게 할 수 있다. 이를 backpressure라고 한다. 이는 전체 시스템의 부하를 균형있게 해주어 시스템의 안정성을 향상시켜준다. 또한 속도도 시스템이 허용할 수 있는 정도로 다이나믹하게 조절이 된다.

 

Reference


https://jenkov.com/tutorials/java-concurrency/producer-consumer.html