Windows Asynchronous Notification IO Model

Asynchronous Notification IO Model 이란 IO의 notification이 비동기로 이루어지는 것.
즉 IO이벤트 발생을 비동기적으로 확인하는 모델이다.
즉 IO이벤트 관찰 함수를 호출하는 시점과 IO이벤트 확인의 시점이 다른 비동기적인 모델이다.
(내 생각에) 리눅스의 epoll과 거의 흡사하다. (코드도)
근데 사용하기는 epoll이 더 편하지 않나 싶다.

select는 Synchronous Notification IO Model 이다. 근데 중요한 게 select를 Asynchronous Notification IO Model로 착각하면 안된다.
물론 select의 timeout을 0으로 둬서 비동기방식으로 사용할 수는 있지만 이는 select자체를 생각해볼 때 옳지 않은 방법이다.
select는 매 함수 호출마다 file descriptor들의 event를 등록해야하는데 만약 비동기방식처럼 사용하려면 매우 비효율적이기 때문이다.
(IO event가 발생하지 않았을 경우 다시 file descriptor들의 event를 등록해야하기 때문)
따라서 select는 asynchronous방식처럼 사용할 수는 있지만 비효율적이고, 애초에 생겨먹은(?)게 Synchronous이다.
그에 반에 epoll과 윈도우의 WSAEventSelect/WSAAsyncSelect같은 경우는 비동기 notification IO model 이다.
select와 달리 관찰할 file descriptor 혹은 handle을 한번만 등록해 놓고 다른 일을 하다가 IO notification을 확인 할 수 있기 때문이다.
즉 epoll과 윈도우의 WSAEventSelect/WSAAsyncSelect 는 IO notification의 관찰을 비동기로 명령해놓고, 다른 일을 하다가 IO event의 확인을 해볼 수 있기 때문에 Asynchronous Notification IO Model이고, select는 함수 호출시 IO notification의 관찰을 명령하고 IO event가 발생했을 때 함수가 반환되기 때문에 Synchronous Notification IO Model 이다. (select도 비동기처럼 사용가능하지만 비효율적.)

댓글