Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- TypeScript
- 알고리즘
- MSA
- Parallel Old GC
- Spring Boot Actuator
- Resilinece4j
- java 정렬
- spring cloud
- Action Pattern
- 사가 패턴
- zipkin
- JPA
- spring batch
- Spring Cloud Netfilx Eureka
- Serial GC
- thread
- 스레드
- 스프링 배치
- Java
- Transaction Pattern
- 생산자 소비자 패턴
- The law of Demeter
- 멀티스레드
- 키클락
- 디자인패턴
- 타입스크립트
- 체인 패턴
- saga pattern
- 디자인 패턴
- 배치
Archives
- Today
- Total
PSD( Private-Self-Development )
생산자 소비자 패턴 본문
Blocking Queue로 멀티스레드 로직을 구현하며,
몬가.... 기능이 뭉쳐져 로직이 지저분 해진다고 느껴서
찾아보니 역시나.... 적용 가능한 디자인 패턴이 있어서 공부해 보았다.
생산자 소비자 패턴?
멀티스레드 환경에서
공유 작업 목록을 가운데에 두고,
생산자(producer) 와 소비자(consumer) 로 나누어 구축하는 디자인 패턴이다.
생산자 소피자 패턴의 구조
- 생산자(producer)
- 블록킹 큐에 작업을 등록 하는 역할
- 주로 디스크 i/o, 네트워크 작업을 한다.
- 공유 자원(Buffer 또는 Queue) ex) Blocking Queue
- 작업 목록
- 멀티 스레드 환경이기 때문에 Blocking Queue 를 사용한다.
- 소비자(consumer)
- 블록킹 큐에 등록된 작업을 가져와서 처리하는 역할
- 주로 CPU 작업을 한다.
- 동기화 메커니즘
- 생산자와 소비자 간의 동기화를 이루기 위한 메커니즘
- 생산자는 공유 자원이 꽉차있는지 확인 및 대기
- 소비자는 공유 자원이 비어있는지 확인 및 대기
- 뮤텍스(Mutex), 세마포어(Semaphore), 조건 변수(Condition Variable) 등이 있다.
- 뮤텍스 : 상호 배제를 통해 한번에 한 스레드만 공유자원에 접근 가능하도록 함
- 세마포어 : 공유 자원에 접근할 수 있는 스레드의 수를 제어
- 조건변수 : 특정 조건을 만족할 때 까지 스레드를 대기시킴
생산자 소비자 패턴의 장점
- 효율성
- 생산자 와 소비자 의 작업을 비동기적으로 처리하여 성능을 향상 시킬 수 있다.
- 역할 분리
- 생성자 와 소비자, 큐의 역할을 분리하여
각각 독립적으로 운영할 수 있다. (서로간의 의존성 저하)
- 생성자 와 소비자, 큐의 역할을 분리하여
- 작업 속도 조절 가능
- 큐의 크기나 생산자의 생산 속도를 조절하여 작업속도를 조절 할 수 있다.
참조
'Backend > Thread' 카테고리의 다른 글
BlockingQueue 와 DelayQueue (0) | 2024.08.26 |
---|---|
CompletableFuture (0) | 2023.07.12 |
Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService (0) | 2023.07.12 |
Thread 와 Runnable (0) | 2023.07.11 |
Thread 란? (0) | 2022.11.15 |