[Archive] 강좌게시판

취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

[myLV.net 집필진 강좌] Actor Framework 구조 분석 - 4

 [myLV.net 집필진 강좌 – 웅킹킹킹]

 

 

 

안녕하세요. 웅킹킹킹 입니다.

 

 

지난 시간에 이어 Actor Framework의 라이브러리를 구성하고 있는 클래스 중 Message Priority Queue 클래스의 분석을 계속 하도록 하겠습니다.

 

Message Priority Queue 클래스는 Actor Framework 구조에서 Actor에서 Method를 실행하기 위해서 Message를 전달하고 전달받는 역할을 하는 클래스 입니다.

 

기존의 QDMH 구조와 마찬가지로 Queue를 통해서 Message를 전달합니다.

 

그래서 지난 시간에는 Message Priority Queue 클래스에서 Queue를 생성하고 Message를 Queue에 추가하는 Enqueue 과정을 설명하였고 이번 시간에는 Queue에서 Message를 가져오는 Dequeue, Queue 해제를 설명합니다.

 

 

 

1. Message Priority Queue 클래스의 Method - Priority Dequeue

 

 

 

 

 

1.png

 

그림 1 Priority Dequeue그림 1 Priority Dequeue

 

Queue에서 데이터를 가져오는 과정을 Dequeue라고 합니다. 즉, Priority Dequeue 메소드는 Queue에서 전달한 Message를 가져오는 기능을 합니다.

 

Priority Dequeue는 소스코드가 조금 복잡합니다. 하지만 살펴보면 간단하니 너무 어렵게 생각하지 않으셔도 됩니다. Priority Enqueue에서 보낸 Message를 전달받습니다.

 

* Actor 클래스의 “Actor Core” Method에서 사용하며 이 때 타임아웃은 -1로 설정하여 사용됩니다. 그래서 타임아웃 -1로 가정하고 소스코드를 분석합니다.

 

i. Queue 버퍼에서 Message 전달 받기.

 

 

그림 2 Queue 버퍼에서 Message 가져오기그림 2 Queue 버퍼에서 Message 가져오기

 

 

앞서 Low, Normal, High, Critical의 단계로 4단계의 우선순위를 정해서 4개의 Queue를 생성합니다. Actor Framework에서는 4단계의 Queue를 Queue 버퍼라고 합니다

 

그림 2와 같이 최초 Queue 버퍼에서 Critical 부터 Low 단계 순으로 순차적으로를 Message를 가져옵니다. Queue 버퍼에 가져올 Message가 있는 경우에는 Message를 가져오면서 Priority Dequeue 메소드는 역할을 다하게 됩니다

 

하지만 Queue버퍼에 Message가 없는 경우에는 타임아웃이 걸리면서 다음 단계로 넘어갑니다

 

 

ii. 기다림 Message, 우선순위 Queue에서 Message와 우선순위 정보를 가져오기.

 

 

그림 3 기다림 Message, 우선순위 Queue에서 Message, 우선순위 정보 가져오기그림 3 기다림 Message, 우선순위 Queue에서 Message, 우선순위 정보 가져오기

 

Queue 버퍼를 통해서 전달한 Message가 없어서 Message를 가져오지 못한 경우 기다림 Message, 우선순위 Queue에서 Message와 우선순위 정보를 가져옵니다.

 

기다림 Message와 우선순위 Queue는 타임아웃 설정이 -1로 되어 있어서 Message를 전달받을 때까지 기다립니다.

 

* 이런 구조를 채택한 이유는 4가지 단계의 우선순위 Queue를 하나의 Method에서 Dequeue를 하기 위해서 입니다.

 

타임아웃 이슈로 인해 4개의 Queue를 하나의 Method에서 다루기 힘들기 때문에 타임아웃이 발생했을 때 Message를 놓치지 않기 위해 기다림 Message, 우선순위 Queue에서 Dequeue를 하는 과정이 생깁니다.

 

 

 

2. Message Priority Queue 클래스의 Method – Flush

 

 

4.png

 

그림 4 Flush그림 4 Flush

  

Queue 버퍼에 있는 Message를 모두 비웁니다.

그리고 버퍼를 비울 때 남아있었던 Message들을 확인할 수 있습니다

 

 

기본 Queue함수 기능 중 하나입니다

 

 

 

3. Message Priority Queue 클래스의 Method – Release Priority Queue

 

 

 

5.png

 

그림 5 Release Priority Queue그림 5 Release Priority Queue

 

Queue 버퍼(우선순위), 기다림 Message Queue, 기다림 우선순위 Queue를 모두 해제합니다. Flush 메소드와 마찬가지로 해제할 때 Queue에 남아있었던 Message를 확인할 수 있습니다.

 

 

 

 

마치며..

 

Actor Framework에서 Message를 Actor에서 전달하여 Method를 실행할 수 있도록 하는 Queue와 관련된 클래스에 대해서 알아보았습니다.

 

Actor Framework에서는 여러 개의 Actor들이 서로 유기적인 관계에서 Message를 주고 받기 때문에 4가지 단계(Low, Normal, High, Critical) Queue가 필요합니다.

 

그래서 좀더 QDMH에서 사용하는 Queue 구조보다 어려운 느낌이 들지만 기본적인 Queue의 사용은 동일합니다. QDMH 구조에 익숙하신 분이라면 QDMH에서 4개의 Queue를 동시에 하나의 소비자루프에서 사용하기 위해서 좀더 기능이 확장된 Queue라고 생각하시면 좀 더 쉽게 접근할 수 있을 거란 생각이 듭니다.

 

 

 

 

다음 시간에는 Message 관련 클래스에 대해서 알아보도록 하겠습니다.

기여자