[CS] producer-consumer pattern
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