[C++]논블로킹vsOverlapped I/O

강병우·2023년 8월 19일
0

네트워크

목록 보기
5/7

논블로킹과 Overlapped I/O(비동기 I/O)에 대해 알아보았다. 이 둘의 차이점을 간단하게 정리할 수 있다.

  • 논블로킹에서의 I/O 실행 상태는 버퍼의 공간으로 판단할 수 있다.
    1. 송신 버퍼에 1바이트라도 데이터가 들어갈 수 있다면 송신할 수 있는 상태로 판단한다.
    2. 수신 버퍼에 1바이트라도 데이터가 들어갈 수 있다면 수신할 수 있는 상태로 판단한다.
  • Overlapped I/O에서의 I/O 실행 상태는 송수신의 완료 여부로 판단할 수 있다.
    1. Overlapped 송신이 진행 중이고 끝나지 않았다면 대기 상태로 판단한다.
    2. Overlapped 수신이 진행 중이고 끝나지 않았다면 대기 상태로 판단한다.

따라서, 논블로킹 소켓은 1바이트라도 버퍼가 비어있다면 송수신이 가능하여 함수를 호출하면 되지만, 일부 상황에서 would block이 나타나 재시도를 해야된다. 이는 I/O 처리가 끝날 때까지 반복된다.
반면에, Overlapped I/O는 단순하게 I/O 처리 중/완료로 상태를 구분하기 때문에, 완료만 기다리면 작업이 끝난다.

논블록 소켓에서는 상태 확인 후 뭔가를 합니다. Overlapped I/O에서는 일단 저지른 후 결과를 확인합니다. 그래서 논블록 소켓을 '뒤늦게'라는 의미의 리액터 패턴이라고 합니다. Overlapped I/O는 '미리'라는 의미의 프로액터 패턴이라고 합니다. - 게임서버 프로그래밍 교과서 (저 : 배현직) P211

게임서버 프로그래밍 교과서(저:배현직),
[C++과 언리얼로 만드는 MMORPG 게임개발 시리즈] Part4: 게임서버(강사 : 루키스)를 학습하고 정리한 내용입니다.

0개의 댓글

관련 채용 정보