-
4. OverLapped I/O개발/서버 네트워크 2023. 8. 3. 15:34
Windows API의 비동기 입출력 방식
하나의 스레드 내에 2개 이상의 데이터 전송을 중첩시킨다.
- OverLapped I/O ****= 중첩된 입출력
- Windows NT 3.0(1993) 에 추가된 API
- WSASend()와 WSARecv() 등 비동기 입출력 함수를 사용할 수 있다.
- 비동기 함수를 사용하기 위해 OVERLAPPED 구조체를 I/O 함수에 전달해야 한다.
SOCKET, 버퍼, OVERLAPPED 객체를 보내는 비동기 입출력 함수. Non-blocking 방식이다. - 입출력 작업이 다른 작업과 중첩되어(동시에) 처리된다.
- 비동기 입출력 방식
- = I/O요청 후 응답을 기다리지 않는다
- 논-블로킹 소켓을 사용
- 바로 완료되지 않아도 PENDING(미처리)을 반환. 완료될 때 이벤트가 발생한다.
- 비동기 함수 호출은 APC 큐를 사용한다.
- Asynchronous Procedure Calls queue
- Windows 의 모든 스레드는 APC 큐를 갖는다.
- api 를 이용하여 콜백 함수와 실행될 스레드를 지정하고,
- 스레드가 alertable state 가 되면 콜백이 실행된다.
- 큐의 OVERLAPPED에 저장된 결과를 사용해 완료 루틴을 호출한다.
IBM의 Power4 (2001). 최초의 멀티코어 프로세서. ( 1GHz) 왼쪽은 LGA775 프로세서(2004-2009) - 멀티코어 CPU의 등장
- 멀티스레딩의 효율 향상
- 멀티스레딩으로 입출력을 더 효율적으로 할 수 있을까?
- 여러 스레드에서 큐에 동시에 접근할 수 있도록 하고 (APC 큐는 스레드마다 하나씩 존재)
- 완료된 I/O를 처리할 스레드 풀을 만들어 사용
'개발 > 서버 네트워크' 카테고리의 다른 글
강의노트 - 멀티스레드 프로그래밍 (0) 2023.08.03 5. I/O Completion Ports (IOCP) (0) 2023.08.03 3. 동기, 비동기 통신 (0) 2023.08.03 2. Windows Socket API(WSA, Winsock) (0) 2023.08.03 1. TCP/IP (0) 2023.08.03 - OverLapped I/O ****= 중첩된 입출력