출처 : http://javawork.egloos.com/2210019
일반적으로 접속 혹은 접속종료을 감지하거나 패킷을 받는 일을 하는 하는 스레드를 워커스레드라고 하고 받은 패킷을 처리하는 일을 하는 스레드를 로직스레드라고 합니다. 프로그래머의 성향에 따라서 워커스레드가 로직처리까지 한다거나, 로직스레드를 하나만 둔다거나, 로직스레드를 다수로 운용하거나 하는 여러가지 방법이 있습니다.
분류해 보면 대략 아래와 같은 그림이 나옵니다.
- Model 1 : 로직스레드 없이 워커스레드에서 로직까지 처리하는 방법 입니다. 컨텍스트 스위칭이 적어서 잘 구성하면 최고의 성능을 낼수 있지만 네트워크 처리와 로직 처리에 대한 구분을 할 수 없어서 모듈화에는 좋지 않습니다.
- Model 2 : 로직스레드 하나로 처리하는 방법입니다. 로직 처리시에 따로 lock을 걸지 않아도 되기 때문에 협업에 유리한 구조 입니다.
- Model 3 : 로직스레드 다수로 처리하는 방법입니다. 로직스레드가 다수 이므로 lock정책을 잘 수립해야 합니다.
- Model 4 : 3번 모델에서 큐를 여러개 두는 방식으로 변형된 방법입니다.
- Model 1 : 12 명
- Model 2 : 27 명
- Model 3 : 15 명
- Model 4 : 7 명
표본 수가 충분하지는 않지만 게임 서버 프로그래머들의 작업 성향을 보여주는 데이터 인 것 같습니다.
반응형
'Program > C & C++' 카테고리의 다른 글
[boost] boost::asio::deadline_timer 를 이용한 timeout 설정 (0) | 2013.03.28 |
---|---|
boost::asio::ip::tcp::socket 에서 IP address 추출하기 (0) | 2013.03.26 |
Packet Generator 패킷 생성기 (0) | 2012.12.28 |
db관련 (0) | 2012.12.11 |
odbc 샘플 (0) | 2012.11.22 |