본문 바로가기
IT/데이터베이스_네트워크

윤성우의 열혈 tcp/ip 소켓 프로그래밍 23장 연습문제 솔루션

by nutrient 2021. 5. 24.
728x90
728x170

 

문    제 1.
Completion Port 오브젝트에 할당될 쓰레드는 프로그래머에 의해서 생성되어야 한다. 그리고 이렇게 생성된 쓰레드는 Completion Port 오브젝트의 핸들을 전달받아서 GetQueuedCompletionStatus 함수를 호출함으로 인해서 Completion Port 오브젝트에 할당이 된다. 즉, Completion Port 오브젝트의 할당은 소스코드 레벨에서 보면 GetQueuedCompletionStatus 함수의 호출을 의미한다. 단, Completion Port 오브젝트를 생성할 때 지정한, CP 오브젝트에 할당할 최대 쓰레드의 수를 넘어서는 쓰레드가 이 함수를 호출하더라도 응답을 받는 쓰레드는 수는 Completion Port 오브젝트를 생성할 때 지정한 최대 쓰레드의 수로 제한된다. 

문    제 2.
Completion Port 오브젝트의 생성, Completion Port 오브젝트와 소켓과의 연결!

문    제 3.
먼저 CreateIoCompletionPort 함수호출을 통해서 Completion Port 오브젝트를 생성한다. 그 다음 다시 CreateIoCompletionPort 함수를 호출해서, 인자로 전달되는 핸들의 소켓에, 완료된 IO의 정보가, 먼저 생성한 Completion Port 오브젝트에 등록되도록 한다. 바로 이 것이 CP 오브젝트와 소켓과의 연결이 의미하는 바다. 

문    제 4. c, d

문    제 5.
 일반적인 선택은 CPU의 수와 동일한 수의 쓰레드를 할당하는 것이다.   ( o )
 가장 좋은 방법은 여건이 허락하는 범위 내에서 실험적인 결과를 통해서 쓰레드의 수를 결정하는 것이다.   ( o )
 할당할 쓰레드의 수는 여유 있게 선택하는 것이 좋다. 예를 들어서 한 개의 쓰레드로 충분한 상황에서는 여유 있게 세 개 정도의 쓰레드를 IOCP에 할당하는 것이 좋다. ( x )

728x90
그리드형

댓글