본문 바로가기

네트워크/개념

[Network] - Overlapped IO vs Nonblocking IO

 흔히 IOCP서버에 대해 공부하다보면 Overlapped IO라는 개념에 대해 먼저 공부하게 된다. 개념 자체는 직관적이나 이전에 알고 있었던 Nonblocking IO(비동기 입출력)과 다른 것이 없는 데 자료마다 부르는 이름이 달라지는 것 같아 혼란이 와서 이 글에 정리 하려고 한다. 먼저 Overlapped IO라는 것은 입출력이 중첩되는 상황을 말하는데, 그림으로 보자면 아래와 같다.

 

 

 

 

중첩된 입출력

 

 

 중첩된 입출력이란 대상에 대해 입출력 작업이 진행되는 와중에 다른 입출력 작업을 진행되는 경우로 위와 같은 상황을 말한다. Overlapped IO라는 것은 따라서 비동기 작업을 기본 전제로 한다. 즉 이런 중첩된 입출력을 위해서는 기본적으로 비동기 방식으로 동작해야 한다는 것이다.

 

 

 

 그럼 여기서 한 가지 의문이 드는 것은 그럼 Overlapped IO와 Nonblocking IO의 차이점이 무엇이냐는 것이다. 조금 이상하다는 생각이 들었고 문득 이전에 보았던 '윤성우 TCP/IP 소켓 프로그래밍' 이라는 책에서 이 차이점에 대해 언급하였던 것이 생각이 나서 다시 펼쳐 보았다.

 

 

 

 

 

'비동기 IO'와 'Overlapped IO'에 차이가 있는가? 차이가 있다고 말해도 좋고 차이가 없다고 말해도 좋다. 중요한 것은 이 둘의 관계를 이해하는 것이다. 비동기 방식으로 IO를 진행하는 경우 Overlapped IO방식으로 입출력을 구성할 수 있기 때문에, 필자는 이 둘을 굳이 구분할 필요가 없다고 말하는 것이다.

 

 

 저자가 언급한 결론은 위와 같았다. 결국 어떤 특징을 좀 더 주의 깊게 보느냐에 따라 다른 것이다. IOCP에서는 이 중첩된 입출력을 좀 더 집중하기 때문에 Overlapped IO라는 말을 사용해서 개념을 설명하는 것이고, 기본적으로 둘의 개념을 알고 있다면 구분은 할 필요가 없다는 것이다.

 

 

 

 이런 부분은 사람마다 관점이 다르므로 이해만 하였다면 그렇구나 하고 넘어가는 것이 옳은 것 같다.