이어서 지금까지 살펴본 Overlapped I/O의 장단점도 알아봅시다.
▼ 표 3-2 논블록 방식 대비 Overlapped I/O의 장단점
장점 |
단점 |
소켓 I/O 함수 호출 후 would block 값인 경우 재시도 호출 낭비가 없다. |
완료되기 전까지 Overlapped status 객체가 데이터 블록을 중간에 훼손하지 말아야 한다. |
소켓 I/O 함수를 호출할 때 입력하는 데이터 블록에 대한 복사 연산을 없앨 수 있다. |
윈도 플랫폼에서만 제공하는 기능이다. |
send, receive, connect, accept 함수를 한 번 호출하면 이에 대한 완료 신호(3.9절 참고)는 딱 한 번만 오기 때문에 프로그래밍 결과물이 깔끔하다. |
accept, connect 함수 계열의 초기화가 복잡하다. |
뒤에서 설명할 I/O completion port와 조합하면 최고 성능의 서버를 개발할 수 있다. |
- |
앞서 했던 말을 되새겨 봅시다. 논블록 소켓에서 I/O operation 상태는 다음과 같습니다.
• 송신 버퍼에 1바이트라도 여유 공간이 있으면 송신 가능, 즉 send available이라고 합니다.
• 수신 버퍼에 1바이트라도 여유 공간이 있으면 수신 가능, 즉 receive available이라고 합니다.
• 이를 통칭 I/O 가능이라고 합시다.
Overlapped I/O에서 I/O 실행(operation) 상태는 다음과 같이 설명할 수 있습니다.
• Overlapped 송신이 진행 중이고 완료가 아직 안 되었으면 ‘Overlapped 송신이 아직 완료 대기 중(pending)’이라고 합니다.
• Overlapped 수신이 진행 중이고 완료가 아직 안 되었으면 ‘Overlapped 수신이 완료 대기 중’이라고 합니다.
• 이를 통칭 ‘I/O 완료 대기 중’ 혹은 ‘I/O 실행 중’이라고 합시다.