마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Thread pooling 게임서버, 동기화 질문입니다.

0 추천
안녕하세요.
 
게임서버 제작중인데...
 
thread를 1:1구조로 만들면 상당히 간단하지만,
 
너무나도 잡아먹는 리소스와 gc처리등의 문제 때문에...
 
thread pool을 사용해야할 것 같습니다.
 
thread pool을 제한값을 10이라고 했을때,
 
클라가 100이라고 가정했을때,
 
100명이서 쓰레드 10개를 사용할 때, 우선순위(랜덤, 누가 먼저될지는 모르는...)를 가지는 10명이 먼저돌고
 
나중순위는 남은 90명 중 누군가가 우선순위를 잡고 사용할 것입니다.
 
이 부분에서는 예상인원대비 쓰레드풀 max를 잘 잡는게 가장 효율적인 서버가 될 것이고요...
 
근데 여기서 문제입니다.
 
쓰레드가 1,2,3...10까지... 10개...있고...
 
클라가 20명이 접속해 있는데... 1, 2, 3~20...
 
클라 1, 11는 쓰레드 1을 사용하고 잇고
 
클라 2, 22는 쓰레드 2를 사용하고 잇습니다....
 
그러면...
 
1, 2와 1vs1을 진행할때는 동기화 문제가 생기지 않을테지만...
 
1, 11이 1vs1의 게임을 진행할때는... 동기화 문제가 생길겁니다...
 
왜냐면 참조변수?의 이름이 다른 쓰레드 영역에서는...
 
변수명이 같아도... 다른 영역에서 서로 존재하니까요... 맞나요???
 
해보니... 그런것 같습니다..
 
위에 말씀 드린 이유는 동기화 때문입니다...
 
동기화를 하지 않으려면...
 
어떻게 처리해야할까요???
 
이게 알듯 말듯하면서... 사람 미치게 하는 뭔가가 있는거 같네요...
 
해결방법 아시는 분께서는...
 
답변 부탁드려요...
 
술을 마시고도... 이것때문에 잠을 못자네요... 낼 출근해야하는데... ㅋㅋㅋ
 
역시 게임서버 만드는게 쉬운게 아니었네요...
 
가장 큰 문제가... 메모리 및 GC, 동기화(동기화 해주면되는데.. 속도때문에... 왠만하면 안하려는...)
 
인것 같네요...
 
꼭 이 것만이 아니라도... 많은 조언 부탁드릴게요...
 
술마셔서 두서없이 적었는데...
 
고수님들이시기 때문에 제가 원하는게 무엇인지 아실거라고 생각합니다...
 
모두 너무나 감사드립니다~~~
 
좋은 밤 되시고요~~
 
낼 뵙겠습니다~~~

 

앱개발잼나 (1,450 포인트) 님이 2013년 3월 26일 질문
앱개발잼나님이 2013년 3월 26일 수정
안녕하세요? pushcat.net 입니다.

속도 때문에 멀티쓰레드 서버에서 동기화를 안한다고 하셨는데요. 최대한 동기화를 안쓰도록 로직을 만드는건 맞지만, 아예 안쓸 수는 없습니다.

클라당 쓰레드가 1:1구조로 만드시는게 동기화를 가장 적게 할 수 있는 방법이지만 언급하셨다시피 동접이 많아질수록 쓰레드가 많아져서 컨텍스트 스위칭등으로 인해 시스템에 많은 부하가 생깁니다.

따라서 쓰레드 폴링 방식을 쓰셔야 하고요, 여러 쓰레드에서 접근 가능한 변수는 꼭 동기화를 하셔야 합니다.

1개의 답변

0 추천
 
채택된 답변
게임서버의 스레드 동기화에는 크리티컬섹션이나 뮤텍스가 주로 쓰입니다.

검색해보시면 많은 자료가 있을거예요. 전 주로 뮤텍스를 썼습니다만, 사실 크리티컬섹션이 더 안정적입니다.
바야바 (3,840 포인트) 님이 2013년 3월 26일 답변
앱개발잼나님이 2013년 4월 22일 채택됨
...