2024. 1. 7. 20:29ㆍCS
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
'CS' 카테고리의 다른 글
[CS] 핀토스 환경 쉽게 구축할 수 있는 레퍼런스 (0) | 2024.02.11 |
---|---|
[CS] Hashing에 대한 나름의 이해 (1) | 2024.01.10 |
[CS] 페이징과 세그먼테이션에 대한 나름의 이해 (1) | 2023.11.25 |
[CS] 가상 메모리와 필요성에 대한 나름의 이해 (0) | 2023.11.25 |
[CS] 선점형 스케줄링과 비선점형 스케줄링 (0) | 2023.11.25 |