Implementing Lightweight Actor in C# (1) - 기본 구조와 스케줄링
들어가며
지난 글(링크)에서는 Actor 패턴을 MMO 서버에 적용할 때의 두 가지 접근 방식 — Zone 단위의 Coarse-grained 방식과 Object 단위의 Fine-grained 방식 — 을 비교해 보았습니다.
이제 드디어 실제 코드를 살펴볼 차례입니다. 이번 글에서는 현재 프로젝트에서 사용 중인 경량 Actor 구현체의 핵심 구조를 소개합니다. 주로 스레드가 어떻게 운용되는지, 그리고 c#의 비동기 메서드(async/await)로 인해 끊겼다 이어지는 스레드 흐름을 어떻게 다루는지에 대해 적어보겠습니다. 다음 주제들을 하나씩 다뤄볼게요.
- Symmetric 스레드 모델: 역할이 고정된 스레드가 아닌, 모든 스레드가 모든 일을 처리하는 방식
- 메시지 큐와 스케줄링:
JobDispatcher를 중심으로 한 작업 분배 - Starvation 방지:
readyQueue를 통한 공정한 처리 - 동기/비동기 메시지 분리:
await키워드와 함께 자연스럽게 동작하는 구조