ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.