인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

mhyim님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동

마무리

워커스레드가 1개일 때 가장 빠를 수 있을까요?

해결된 질문

작성

·

77

·

수정됨

1

루키스님 안녕하세요?

C# 서버에서 넘어와서 CPP 서버 공부하고 있습니다.

 

스트레스 관련해서 이해가 안되는 부분이 있어 질문 드리게 되었습니다.

 

제가 스트레스 테스트를 한 방법은 recvCount, sendCount 변수에 ++하여 1초에 1번 출력하는 방식으로, '개략적으로' 카운트가 되는지 테스트하고 있습니다.

C# 서버에선 C_Move패킷을 각 클라이언트가 0.25초마다 서버로 보내서 100명의 더미클라이언트로 치면 서버에서 400번 Recv, 40000 Send(브로드캐스트이므로) 정도로,

300명 정도까지 Move 패킷을 처리할 수 있는 수준으로 부하테스트가 되었습니다.

 

근데 CPP IOCP 서버에서 워커 스레드는 컴퓨터 스레드 개수에 맞게 하는게 적당하다고 하셨고, 실제 배포하신 자료에도 워커스레드는 5개를 정해주셨습니다 (저는 핵사 코어 컴퓨터를 사용 중입니다)

 

C#과 마찬가지로 더미 클라이언트.가 C_Move 패킷을 보내고 count 변수에 ++하면서 보고 있는데, 워커 스레드가 오히려 1개일 때 월등히 작업이 빠릅니다. 스레드 1개는 300명 내외까지 가능하지만, 2개 이상부터는 100명도 버거운 수준이었습니다.

 

룸이 하나인 상황이어서 컨텍스트 스위칭 때문에 오히려 워커 스레드 2개부터 느릴 수 있는걸까요? 고민해봤는데 명확한 답이 안나와 질문 드립니다.

 

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 물론 단순한 일이라면 분담하는이 한 쓰레드가 몰빵하는게 더 빠를 수도 있습니다.
현실적으로 CPU들이 바쁘게 움직이게 일감을 분담한다는 측면에서 멀티쓰레드를 사용하는 것이지,
작은구멍가게에 직원을 100명 배치한다고
무조건 좋은 것은 또 아닌 것과 같습니다.

mhyim님의 프로필 이미지
mhyim
질문자

시간내서 답변해주셔서 감사합니다!

0

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

안녕하세요, 인프런 AI 인턴입니다. mhyim님, 질문해주신 내용을 바탕으로 적절한 답변을 찾아 보았습니다.

C++ IOCP 서버에서 워커 스레드의 수가 성능에 미치는 영향은 여러 가지 요인에 의해 결정될 수 있습니다. 기본적으로 워커 스레드는 CPU 코어 수에 맞추어 설정하는 것이 일반적인 권장 사항인데요. 이는 보통 컨텍스트 스위칭을 최소화하고 효율성을 높이기 위함입니다. 그러나 특정 조건에서는 워커 스레드가 많은 것이 오히려 성능을 제한할 수 있습니다. 특히 하나의 큰 작업을 처리하는 경우, 다수의 워커 스레드가 오히려 컨텍스트 스위칭 비용을 높여 성능 저하를 초래할 수 있습니다.

관련된 기존 질문에서 비슷한 내용을 다루고 있는 게시물을 찾았습니다. 아래 URL을 참고하셔서 더 깊이 있는 내용을 확인해보실 수 있습니다:

  1. 스트레스 테스트를 해봤는데 이 방식이 맞나요?
    • 이 질문에서는 서버와 클라이언트의 통신 패킷 처리에 대한 성능 테스트가 진행되었으며, 워커 스레드에 따른 성능 변화를 논의하고 있습니다. 멀티 스레드 환경에서 다른 측면도 고려하는 것이 중요합니다.

질문하신 C++ IOCP 서버에서 워커 스레드 영향에 대한 이해를 돕기 위한 간단한 설명은 다음과 같습니다:

컨텍스트 스위칭 문제: 워커 스레드가 많아지면 서로 다른 스레드 사이에서 CPU가 작업을 전환해야 하는데, 이 과정에서 발생하는 컨텍스트 스위칭 비용 때문에 오히려 성능이 저하될 수 있습니다.

워크 로드 관리: 워커 스레드가 처리해야 하는 업무량(워크 로드)이 각 스레드에 효율적으로 배분되지 않으면 오히려 병목 현상을 초래할 수 있습니다. 한 스레드가 과부하 상태에 빠지는 문제가 발생할 수 있고, 전체적인 성능 저하로 이어질 수 있습니다.

이러한 설명들이 실제 문제 해결에 도움을 줄 수 있기를 바랍니다. 추가적으로 궁금한 점이 있으시면 질문을 주시면 좋겠습니다.

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

mhyim님의 프로필 이미지
mhyim
질문자

제발 너 말고 루키스님이 대답좀 해줘라..

mhyim님의 프로필 이미지

작성한 질문수

질문하기