Cộng đồng Hỏi & Đáp của Inflearn
receiveasync 질문입니다.
Viết
·
609
0
제가 이해한 바로는 receiveasync를 쓰게 되면 쓰레드풀에서 쓰레드를 하나 끌어와서 그 안에서 루프를 돌면서 데이터가 오는지 안오는지 체크하다가 온게 확인되면 args.Completed 를 invoke 시켜준다고 이해했는데요.
그럼 만약에 동접 10000명이 있는데 이들이 처음에 소켓에 연결하고 receiveasync 함수를 호출하면 쓰레드가 10000개가 생성되는 것 아닌가요?
그리고 만약 이 10000명이 send를 보내주기 전까지는 각각의 10000개의 쓰레드가 루프 안에서 블락되어 있는 상태 아닌가요?
Quiz
네트워크 기초 이론 학습이 서버 프로그래밍에 중요한 이유가 무엇일까요?
서버 하드웨어 선택에 도움이 되어서
동시 접속 처리 및 해킹 방어 등 안정성 확보를 위해
데이터베이스 설계를 더 효율적으로 할 수 있어서
클라이언트 UI 디자인 실력을 향상시켜서
Câu trả lời 3
2
그럼 예를 들어서 한명의 클라이언트만 존재한다고 했을 때 맨 처음 코드부터 receiveasync코드를 호출하고 또 더 나아가서 실제로 recv가 완료되기 전까지는 메인쓰레드 하나만 진행되고 있다가 recv가 완료되면 그 때 쓰레드풀에서 쓰레드가 잠깐 개입해서 args.Completed를 invoke 해주고 빠져주는 건가요??
-> 네 그렇습니다.
근데 궁금한 것은 어떻게 메인쓰레드 혼자 로직을 진행하고 있는데 중간에 어떤 일이 완료된 것에 대해서 알림을 받을 수 있는 건가요?? 그게 따로 쓰레드로 빼서 처리되고 있던 것도 아닌데...
혹시 ReceiveAsync함수가 내부적으로 어떻게 돌아가는지 알 수 있는 방법이 없나요??
-> 운영체제가 해줍니다. 메인쓰레드 혼자 로직을 실행한다고는 하나
주기적으로 커널 모드로 돌아가서 Windows 운영체제가 관리를 해주고 있죠.
2
제가 이해한 바로는 receiveasync를 쓰게 되면 쓰레드풀에서 쓰레드를 하나 끌어와서 그 안에서 루프를 돌면서 데이터가 오는지 안오는지 체크하다가 온게 확인되면 args.Completed 를 invoke 시켜준다고 이해했는데요.
-> 그게 아니고 실제 recv가 실제로 완료되면, 그 때 쓰레드풀에서 쓰레드가 개입해서 args.Completed를 invoke합니다. 경우에 따라 바로 완료되면 (pending == false) 그냥 이어서 처리를 해야 하구요.
그럼 만약에 동접 10000명이 있는데 이들이 처음에 소켓에 연결하고 receiveasync 함수를 호출하면 쓰레드가 10000개가 생성되는 것 아닌가요?
-> 아닙니다.
그리고 만약 이 10000명이 send를 보내주기 전까지는 각각의 10000개의 쓰레드가 루프 안에서 블락되어 있는 상태 아닌가요?
-> 아닙니다. 블락된건 Blocking 계열 함수고 Async는 비동기라서 예약을 하고 완료 통지를 따로 받는 겁니다.
0
그럼 예를 들어서 한명의 클라이언트만 존재한다고 했을 때 맨 처음 코드부터 receiveasync코드를 호출하고 또 더 나아가서 실제로 recv가 완료되기 전까지는 메인쓰레드 하나만 진행되고 있다가 recv가 완료되면 그 때 쓰레드풀에서 쓰레드가 잠깐 개입해서 args.Completed를 invoke 해주고 빠져주는 건가요??
근데 궁금한 것은 어떻게 메인쓰레드 혼자 로직을 진행하고 있는데 중간에 어떤 일이 완료된 것에 대해서 알림을 받을 수 있는 건가요?? 그게 따로 쓰레드로 빼서 처리되고 있던 것도 아닌데...
혹시 ReceiveAsync함수가 내부적으로 어떻게 돌아가는지 알 수 있는 방법이 없나요??





