목록게임프로그래밍 (83)
bdfgdfg
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..
함수 객체 - 함수 객체는 함수처럼 호출 가능한 클래스 객체. - 즉 함수처럼 동작하는 객체 - 함수 객체를 정의하는 방법은 '()'연사자를 오버로딩하면 된다. 함수 객체의 간단한 예시 class Functor { public: void operator()(void) { std::cout
IOCP - 입출력 완료 포트란 의미 - 입/출력 작업에 대한것을 처리해주는 오브젝트. - IOCP도 커널오브젝트. 입출력 작업과 관련있는 핸들에서 발생하는 이벤트를 커널단에서 관리해줌. -> 단 모든 입출력 핸들이 사용가능한것은 아니고, 입출력 핸들이 비동기 작업이 가능해야한다. -> 그 이유는 비동기 입출력이 가능한 핸들의 이벤트를 IOCP가 대신 처리해주기 때문 -> 즉 우리는 IOCP에게 작업을 맡겨두고 결과만을 우리가 나중에 확인하면 된다. (비동기방식) IOCP의 동작 - IOCP는 메인 프로세스와 별도로 동작한다. - 현재 입/출력 작업이 어떻게 진행되고 있는지 작업 프로세스에서는 알 필요가없다. -> 단지 작업의 결과만을 통보받는다 (우리가 나중에 확인한다) 참고 동기 입출력 vs 비동기 ..