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

권이현님의 프로필 이미지

작성한 질문수

C# TCP/IP 소켓 프로그래밍

TAP

5:34 질문 있습니다.

해결된 질문

작성

·

341

·

수정됨

0

안녕하세요 강의 복습중 궁금한점 생겨서 질문드립니다.

21번줄에 client가 Accept한 이후 통신에 대한 함수(ReadAsync)를 ThreadPool에 추가하는 형태로 코딩을 하셨는데요

ReadAsync함수에서는 while(true)내부에서 지속적으로 클라이언트와 통신을 해야하기 때문에 사실상 QueueUserWorkItem로인해 생성된 쓰레드풀의 쓰레드가 대기상태로 돌아가는 상황은 클라이언트가 연결을 종료했을 경우 말고는 없기 때문에

쓰레드풀의 쓰레드1개 = 클라이언트1개로 이해했습니다.

그렇다면 클라이언트가 connect요청을 하여 서버쪽에서accept를 할때마다 쓰레드풀의 쓰레드를 1개식 할당 하는 구조상

클라이언트 100명만 접속하더라도 쓰레드풀의 쓰레드 100개를 사용하게 되는건데 성능상 문제가 생기진 않는걸까요? 아니면 비동기 방식이기 때문에 괜찮은건가요?

혹은 쓰레드풀의 쓰레드1개 = 클라이언트1개 라는 조건이 틀린걸까요?

제가 잘못 이해한 부분이 있는걸까요?

답변 1

1

에릭권님의 프로필 이미지
에릭권
지식공유자

ReadAsync 내부에서 async await를 사용해서 문제가 생기지않습니다. Environment.CurrentManagedThreadId 쓰레드 번호를 확인해보시면 대충 1개의 쓰레드가 10개정도의 클라이언트를 커버합니다.