본문 바로가기

분류 전체보기174

Chapter 23 - IOCP(Input Output Completion Port) 23-1 : Overlapped IO를 기반으로 IOCP 이해하기 리눅스의 epoll과 윈도우의 IOCP 사이의 절대적 비교우위는 존재하지 않음 대신 하드웨어의 성능 / 할당된 대역폭이 충분한 상황에서 응답시간 / 동시접속자 수에 문제가 발생할 경우 아래 사항들을 먼저 고려 비효율적인 IO의 구성 또는 비효율적인 CPU의 활용 데이터베이스의 설계내용과 쿼리(Query)의 구성 윈도우에서는 ioctlsocket() 함수를 통해 논블로킹 모드로 소켓의 속성을 변경할 수 있음 #include int WSAAPI ioctlsocket(SOCEKT s, long cmd, u_long *argp); // 성공시 0, 실패시 SOCKET_ERROR 반환 cmd : 소켓의 IO방식을 지정 cmd를 입출력 모드를 뜻하는.. 2023. 2. 24.
Chapter 22 - Overlapped IO 모델 22-1 : Overlapped IO 모델의 이해 IO의 중첩 : 하나의 쓰레드 내에서 동시에 둘 이상의 영역으로 데이터를 송수신함으로써 입출력이 중첩되는 상황 입출력 함수가 호출 즉시 반환해야함 - 비동기 IO가 필요 따라서 입출력 함수는 논블로킹 모드로 동작해야함 Overlapped IO에서는 입출력 자체보다 입출력이 완료된 상황의 확인이 중요 Overlapped IO에 적합한 소켓을 생성하는데는 WSASocket() 함수를 사용 #include SOCKET WSASocket(int af, int type, int protocol, LPWSAPROTOCOL_INFO lpProtocolInfo, GROUP g, DWORD dwFlags); // 성공시 소켓 핸들, 실패시 INVALID_SOCKET 반환.. 2023. 2. 24.
Chapter 21 - Asynchronous Notification IO 모델 21-1 : 비동기(Asynchronous) Notification IO 모델의 이해 send()와 recv() 함수는 동기(Synchronous)화된 입출력 함수 send() 함수가 호출되는 순간부터 데이터의 전송이 시작되고, send() 함수의 호출이 완료(반환)되는 순간 데이터의 전송이 완료됨 recv() 함수가 호출되는 순간부터 데이터의 수신이 시작되고, recv() 함수의 호출이 완료(반환)되는 순간 데이터의 수신이 완료됨 즉, 입출력 함수의 반환시점과 데이터 송수신의 완료시점이 일치 동기화된 입출력은 입출력이 진행되는 동안 호출된 함수가 반환을 하지 않는다는 단점이 존재함 따라서 보다 효율적으로 CPU를 활용하기 위해서는 비동기 방식을 사용해야함 동기와 비동기 개념은 입출력 뿐만 아니라 Not.. 2023. 2. 24.
Chapter 20 - Windows에서의 쓰레드 동기화 20-1 : 동기화 기법의 분류와 CRITICAL_SECTION 동기화 윈도우 운영체제의 연산방식을 이중모드 연산(Dual-mode Operation)이라고 부름 유저모드(User mode) : 응용 프로그램이 실행되는 기본모드, 물리적인 영역에의 접근이 허용되지 않으며 접근 가능한 메모리 영역에도 제한이 존재 커널모드(Kernel mode) : 운영체제가 실행될 때의 모드, 메모리 및 하드웨어의 접근에 제한이 없음 응용 프로그램 실행과정에서는 유저모드 및 커널모드가 수시로 전환됨 유저모드와 커널몯가 나누어져 잇는 것은 운영체제와 관련된 메모리 영역을 보호하기 위함 쓰레드와 같이 커널 오브젝트의 생성을 동반하는 리소스 생성은 유저모드 > 커널모드 > 유저모드의 변환 과정을 거침 단, 이 때 빈번한 모드 .. 2023. 2. 24.