Completion Port기반의 채팅프로그램 20021688 김창수
IOCP 란? ‘Input Output Completion Port’의 약자. Win32에서 제공하는 커널 오브젝트 중 하나. 윈도우 NT계열 컴퓨터에서 가장 빠른 네트워크 성능을 내는 I/O모델. 기술적으로 Overlapped I/O와 I/O를 처리하는 ‘스레드 풀(Tread Pool)’ 사용으로 성능 극대화. P443~449참조
Overlapped I/O의 장점 여러 입출력이 중첩되어 병렬적으로 처리. 비동기 방식인 SCAN 스케줄 방식으로 효율적인 스케줄링
IOCP의 필요성 IOCP를 사용하지 않을 경우 – 단점 윈도우 운영체제는 스레드마다 약 20ms의 시간과 1MB의 메모리를 할당한다. 멀티 스레드로 클라이언트를 처리할 경우 스레드 전환(Context switching)에 많은 시간을 소비하고 클라이언트 수에 비례해서 많은 메모리 자원을 소비하게 된다. IOCP를 사용할 경우 - 장점 IOCP를 이용하면 작업 스레드(2~3개)가 작업이 주어질 경우에만 작동하므로 스레드 전환 시간이 거의 없다. 멀티스레드 보다 사용하는 스레드의 개수가 적기 때문에 메모리 자원을 절약할 수 있다. 많은 수의 클라이언트 접속시 메모리 풀을 이용하여 메모리 할당과 해제를 하기 때문에 메모리 단편화가 발생하지 않는다.
Overlapped I/O의 장점 여러 입출력이 중첩되어 병렬적으로 처리. 비동기 방식인 SCAN 스케줄 방식으로 효율적인 스케줄링
Overlapped I/O의 장점 디바이스로부터 읽어온 데이터를 중간 버퍼에 복사하는 과정없이 직접 사용자 버퍼로 데이터로 데이터를 들어오게 함으로써 버퍼링 오버헤드가 준다.
Thread Pool 작업을 처리함에 있어 매번 스레드를 생성하는 것이 아니라 여러 스레드를 미리 생성한 후 필요할 때 가져다가 사용하고 반환. CPU의 개수에 따라 실행되는 스레드를 조절하며 스레드 컨텍스트 스위칭 오버헤드를 줄일 수 있다.
Overlapped I/O Overlapped I/O방식 서버 소켓 1 소켓 2 소켓 3 스레드 1 스레드 2 스레드 3
Overlapped I/O와 Thread Pool 혼합 방식 서버 소켓 1 소켓 2 소켓 3 스레드 1 스레드 2 스레드풀
구조도 및 관계 1 클라이언트를 100개까지 생성할 수 있게 설계.
실행 순서 서버가 준비되어지고 START버튼을 누르면 bind, listen이 실행되어진다. 클라이언트가 IP, PORT번호를 입력하고 서버에 연결된다. 클라이언트가 메시지를 입력하고 전송되어지면 모든 클라이언트에게 전송되어진다. 서버는 연결된 클라이언트 수, 해지 클라이언트, 메시지 전송 성공 또는 실패 정보를 실시간으로 출력한다. # 추가적으로 파일 전송 기능도 구현
서버 GUI SEND : 모든 클라이언트에게 일괄적으로 텍스트를 보냄 START : 내부적으로 BIND(), LISENT()함수를 실행시킴
클라이언트 GUI CONNECT : IP, PORT입력 팝업 창이 실행 SEND : 다른 클라이언트에게 텍스트 전송
기대효과 모든 소켓 입출력 모델 중 가장 뛰어난 성능을 제공함으로써 채팅 및 파일 전송에서 신뢰성 있는 서버를 제공하며 보다 더 많은 클라이언트들을 동시에 연결할 수 있다. 다른 포트 방식을 사용하는 서버에 비해서 보다 더 빠른 파일 전송을 제공하며 효율적인 스레드 사용으로 클라이언트와 서버의 부하를 줄일 수 있다.
일정 1주차 2주차 3주차 4주차 자료수집 분석 및 설계 구현
참고 문헌 “TCP/IP 프로토콜”, 이재광, 미래컴 “윈도우 네트워크 프로그래밍”, 김선우