목록전체 글 (253)
bdfgdfg
이론은 앞서 두개의 글(하나는 비공개)을 통해 공부했으니 바로 코드 IOCompletionPort.h #pragma once #include "std.h" #define MAX_SOCKBUF 1024 // 패킷(현재는 버퍼)크기 #define MAX_CLIENT 100 // 최대 접속가능한 클라이언트 수 #define MAX_WORKERTHREAD 4 // 쓰레드 풀(CP객체)에 넣을 쓰레드 수 enum class IO_TYPE { IO_RECV, IO_SEND }; // Overlapped 구조체를 확장하여 사용. struct OverlappedEx { WSAOVERLAPPED m_wsaOverlapped; WSABUF m_wsaBuf; char m_dataBuffer[MAX_SOCKBUF]; IO_T..
I/O Completion Port 모델 - 윈도우즈에서 제공하는 I/O모델 중 최고의 성능 - Completion Port객체는 Overlapped I/O에서 쓰레드 풀링과 Queue라는 메커니즘을 동시에 접목. 쓰레드 풀링 - 풀(Pool)이란 집합소 또는 수영장에서 물을 모아놓은곳등의 의미. 즉 어떤 것을 모아 놓은 곳을 말한다. - 쓰레드 풀(Pool)은 실제로 프로그램에서는 시작할 때 여러개의 쓰레드를 대기상태로 미리 생성해놓은 것을 쓰레드 풀 이라 한다. - 그리고 이 쓰레드 풀에 대기중인 쓰레드들 중에 현재 필요한 만큼 꺼내어 실행 상태로 바꾸어서 사용하고 다 사용한 스레드는 파괴하지 않고 다시 대기상태로 바꿔서 쓰레드 풀에 넣어주는 일련의 과정을 쓰레드 풀링 쓰레드 풀링을 사용하는 이유 1..
콜백기반은 단순히 콜백함수를 등록하고, 해당 비동기 io를(정확히는 Overlapped IO, WSARecv,WSASend등의 함수)호출한 쓰레드에 완료된 작업을 APC큐에 넣어둔다. 그리고 해당 쓰레드가 호출이 되어도 되는 순간에 Alertable상태로 만들어 APC큐에 쌓인 모든 일감들을 처리한다. -> 단순하게 보면 이벤트기반과 달리 생성과 신호체크가 없고, 콜백함수를 통해 IO완료 처리를 하게 된다. 먼저 Overlapped I/O는 비동기 I/O이다. 넌블록킹 + 비동기 I/O의 조합으로서 사용되는 방법인데. 동기를 예로들면, 넌블록킹 소켓일 때 그 작업이 끝나고 나서 결과를 따로 통지하거나 알려주지 않기때문에 따로 사용자가 계속해서 동기 I/O가 완료되었는지 확인을 해야한다. Overlappe..