채널톡 아이콘

인프런 커뮤니티 질문&답변

mhyim님의 프로필 이미지

작성한 질문수 58

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Completion Port 모델

IOCP 워커 스레드 순서 보장 질문 드립니다.

작성

·

47

·

수정됨

0

루키스님 안녕하세요?

C#서버 강에서 넘어와서 C++서버 공부하고 있습니다. C# 서버와 비교하면서 공부하다 워커 스레드 순서 보장이 궁금해서 질문 드리게 되었습니다.

 

C# 서버에서는 Room.Flush()따위를 메인 함수의 와일루프에서 호출해서 단일 스레드로 처리하기 때문에 순서보장이 되는 것을 직관적으로 이해했습니다.

 

여기 예시에서는 워커스레드를 5개를 배분해주셨습니다. C# GameRoom으로 빗대면, 긴~~ 작업 Job A와, 짧은 B가 있는데 A->B 순서로 진행이 되어야 한다고 하면,

 

1번 워커 스레드는 먼저 들어온 A를 처리중..

2번 워커 스레드가 이어서 들어온 B 작업을 처리.. A보다 먼저 처리 완료.

1번 워커 스레드가 처리중인 A 처리 완료..

이렇게 B->A 순서로 처리가 될 것 같다는 생각이 들었습니다.

 

Q1. IOCP 워커 스레드가 순서 보장이 되는지?

Q2. 그럼에도 불구하고 워커스레드를 N개 하신 이유가 있을 것 같은데 C#도 그렇게 할 수 있을지? 예를 들어 Room의 처리를 1, 2, 3, 4, 5번 스레드를 파서 동시에 처리 할 수 있을지?

Q3. C# 서버에서는 Room에 1개의 스레드를 배분한 특별한 이유가 있는지?

궁금합니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

mhyim님께서 궁금해 하시는 IOCP 워커 스레드의 순서 보장 문제와 관련하여 비슷한 질문과 답변이 인프런에 존재하여 이를 공유드립니다.

  1. IOCP 워커 스레드의 순서 보장: IOCP 모델을 사용하는 경우, 여러 개의 워커 스레드가 동시에 작업을 처리할 수 있기 때문에 작업의 순서가 보장되지 않습니다. 즉, 작업 A와 B가 순서대로 들어왔다 하더라도, 작업 B가 먼저 처리될 수 있음을 의미합니다. 이는 C++ 서버 짜는 방식에서 일반적으로 발생할 수 있는 상황입니다.

  2. 여러 워커 스레드를 사용하는 이유: 여러 개의 워커 스레드를 사용하는 이유는 높은 동시성을 제공하여 시스템의 전체 처리량을 증가시키기 위함입니다. 특정한 작업의 순서를 보장하려면 다른 메커니즘(예: 작업에 대한 우선 순위 관리, 큐잉)을 사용해야 합니다.

관련된 질문과 답변으로는 아래 링크들을 참고하실 수 있습니다:
- job queue 흐름에 관하여 질문있습니다: 이 게시물에서는 JobQueue에서 처리 순서를 관리하는 방식에 대한 예제와 설명을 확인하실 수 있습니다.

질문에 명확히 포함된 순서 보장 방법과 관련된 현재 코드나 예시가 제공되지 않는 경우, 위의 자료들과 강의 내용을 바탕으로 추가적인 실험과 학습을 진행해 보시는 것을 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.