티스토리 뷰

Producer-Consumer Pattern


생성자-소비자 패턴은 작업물을 가운데 위치 시키고 작업을 생산자와 작업을 처리자를 분리하는 설계 방법이다.

작업을 생성하고 처리하는 부분이 각각 감당할 수 있는 작업을 비동기적으로 처리하여 부하를 조절할 수 있다는 장점을 가진다.

예를 들어, 물건을 주고 받기 위해 물건 보관함을 이용하게 되면 서로 같은 시간에 만나지 않아도 물건을 전달한다 라는 작업을 처리할 수 있다. 이와 같이 비동기적으로 작업 처리를 분할하여 부하를 조절 할 수 있게 된다.

 

비슷한 맥락의 예시들
  • MQ(Message Queue)
  • androidx.fragment 에 뷰 통신에 대한 종속성을 분리방법.
  • MVVM

 

구현 코드

Queue

 

 

Queue 구현체 ( JobQueue )

 

Producer ( 공급자 )

 

 

Consumer ( 소비자 )

main() 함수

 

 

전체 작업 과정


1. Queue에 공급자가 작업물을 넣는다.(PUT)

2. Queue에 작업물이 put 되면 큐 내에 작업물이 한 개 이상이 되기 때문에, Consumer에게 이를 알린다.

 

3. 대기상태에서 작업 상태과 된 Consumer 들은 Queue 내부에서 작업물을 가져와(POP) 처리한다.

4. Queue 내부 작업물이 비어지게 되면, Consumer는 Moniter에 대기상태가 된다. ( WAIT )

 

 

 

참조

댓글