inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Session #1

receiveasync 질문입니다.

610

shef

작성한 질문수 22

0

제가 이해한 바로는 receiveasync를 쓰게 되면 쓰레드풀에서 쓰레드를 하나 끌어와서 그 안에서 루프를 돌면서 데이터가 오는지 안오는지 체크하다가 온게 확인되면 args.Completed 를 invoke 시켜준다고 이해했는데요.

그럼 만약에 동접 10000명이 있는데 이들이 처음에 소켓에 연결하고 receiveasync 함수를 호출하면 쓰레드가 10000개가 생성되는 것 아닌가요?

그리고 만약 이 10000명이 send를 보내주기 전까지는 각각의 10000개의 쓰레드가 루프 안에서 블락되어 있는 상태 아닌가요?

unity network C#

답변 3

2

Rookiss

그럼 예를 들어서 한명의 클라이언트만 존재한다고 했을 때 맨 처음 코드부터 receiveasync코드를 호출하고 또 더 나아가서 실제로 recv가 완료되기 전까지는 메인쓰레드 하나만 진행되고 있다가 recv가 완료되면 그 때 쓰레드풀에서 쓰레드가 잠깐 개입해서 args.Completed를 invoke 해주고 빠져주는 건가요??

-> 네 그렇습니다.

근데 궁금한 것은 어떻게 메인쓰레드 혼자 로직을 진행하고 있는데 중간에 어떤 일이 완료된 것에 대해서 알림을 받을 수 있는 건가요?? 그게 따로 쓰레드로 빼서 처리되고 있던 것도 아닌데...
혹시 ReceiveAsync함수가 내부적으로 어떻게 돌아가는지 알 수 있는 방법이 없나요??

-> 운영체제가 해줍니다. 메인쓰레드 혼자 로직을 실행한다고는 하나
주기적으로 커널 모드로 돌아가서 Windows 운영체제가 관리를 해주고 있죠.

2

Rookiss

제가 이해한 바로는 receiveasync를 쓰게 되면 쓰레드풀에서 쓰레드를 하나 끌어와서 그 안에서 루프를 돌면서 데이터가 오는지 안오는지 체크하다가 온게 확인되면 args.Completed 를 invoke 시켜준다고 이해했는데요.

-> 그게 아니고 실제 recv가 실제로 완료되면, 그 때 쓰레드풀에서 쓰레드가 개입해서 args.Completed를 invoke합니다. 경우에 따라 바로 완료되면 (pending == false) 그냥 이어서 처리를 해야 하구요.

그럼 만약에 동접 10000명이 있는데 이들이 처음에 소켓에 연결하고 receiveasync 함수를 호출하면 쓰레드가 10000개가 생성되는 것 아닌가요?

-> 아닙니다.

그리고 만약 이 10000명이 send를 보내주기 전까지는 각각의 10000개의 쓰레드가 루프 안에서 블락되어 있는 상태 아닌가요?


-> 아닙니다. 블락된건 Blocking 계열 함수고 Async는 비동기라서 예약을 하고 완료 통지를 따로 받는 겁니다.

0

shef

그럼 예를 들어서 한명의 클라이언트만 존재한다고 했을 때 맨 처음 코드부터 receiveasync코드를 호출하고 또 더 나아가서 실제로 recv가 완료되기 전까지는 메인쓰레드 하나만 진행되고 있다가 recv가 완료되면 그 때 쓰레드풀에서 쓰레드가 잠깐 개입해서 args.Completed를 invoke 해주고 빠져주는 건가요??
근데 궁금한 것은 어떻게 메인쓰레드 혼자 로직을 진행하고 있는데 중간에 어떤 일이 완료된 것에 대해서 알림을 받을 수 있는 건가요?? 그게 따로 쓰레드로 빼서 처리되고 있던 것도 아닌데...
혹시 ReceiveAsync함수가 내부적으로 어떻게 돌아가는지 알 수 있는 방법이 없나요??

TLS 질문드립니다.

0

35

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

39

2

Unity Span

0

66

2

XML, Dll 차이점

0

99

2

Session 질문입니다

0

74

1

Write Read 커서 키워드

0

69

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

65

2

네트워크 Send 전담 스레드 배치

0

94

2

UnhandledException 으로 서버 터지는 경우

0

82

2

컨텐츠 단, 엔진 단

0

100

1

질문 있습니다

0

73

2

C# 게임서버 3D MMORPG

0

141

2

유니티6 버전

0

94

2

receive하는 부분과 send하는 부분의 차이

0

128

2

커서의 위치의 중요성

0

99

2

C++ 전혀 모르는데 C# 서버

0

164

2

강의에 질문이 있습니다

0

83

2

멀티스레드 이해도 질문

0

90

1

500 vs 500

0

122

3

OnAcceptHandler 액션 함수

0

57

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

185

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

78

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

100

1

스핀락 질문.

0

104

2