Overlapped 모델(1)

Server/Winodw Network 2015. 10. 25. 22:19

Overlapped 모델은  Select, WSAAsyncSelect WSAEventSelect와는 근본적으로 다른

입출력 방식으로 고성능을 제공한다.

 

Overlapped의 동작원리

 

동기 입출력(synchronous I/O)

- 애플리케이션은 입출력함수를 호출한 후에 입출력이 작업이 끝날 때까지 기다린다.

- 입출력 작업 끝나면 입출력함수는 리턴하고 애플리케이션은 입출력 결과를 처리하거나

  다른 작업을 진행할 수 있음

 

 

비동기 입출력(asynchronous I/O) 또는 중첩 입출력(overlapped I/O)

- 애플리케이션은 입출력 함수를 호출한 후 입출력 작업의 완료와 상관없이 다른 작업을

   진행할 수 있다.

- 입출력 작업이 끝나면 운영체제는 작업 완료를 애플리케이션에 알려준다.

- 이떄 애플리케이션은 작업을 중단하고 입출력 결과를 처리한다.

 

 

 

 

 

 

s : 비동기 입출력 할 소켓

lpBuffers : WSABUF 구조체 배열의 시작 주소이다.

                각각의 배열 원소는 버퍼의 시작 주소와 길이를 담고 있다.

dwBufferCount : WSABUF 구조체 배열의 원소 개수이다.

lpNumberOfBytesSent,Recvd : DWORD형 변수 주소값이다.  함수 호출이 성공하면

                                             이 변수에 보내거나 받은 바이트 수가 저장됨

dwFlags, lpFlags :

lpOverlapped : WSAOVERLAPPED 구조체 변수 주소값

                      비동기 입출력 위한 정보를 운영채제에 전달하거나 ,결과를 애플리케이션에

                      전달할 때 사용한다.

lpComletionRoutine : 입출력 작업 완료되면 운영체제가 자동으로 호출할 완료 루틴(콜백 함수)

                               의 주소값이다.

 

특징 

1.  scatter / gather 입출력 지원

-  여러 개의 버퍼에 저장된 데이터 모아서 보내거나, 받은 데이터를 여러 개의 버퍼에 흩트려

    저장할 수 있다.

 

2. 마지막 인자에 모두 NULL 사용하면 동기 함수로 동작

3. overlapped 모델(1)에서는 WSAOVERLAPPED 구조체의 hEvent 변수를,

    overlapped 모델(2)에서는 lpCompleteRoutine 인자를 사용함

   

 

 

 

 

'Server > Winodw Network' 카테고리의 다른 글

쓰레드 동기화  (0) 2015.11.11
Signaled vs Non-Signaled  (0) 2015.11.11
스레드의 우선순위 컨트롤  (0) 2015.10.12
프로세스, 스레드의 우선순위  (0) 2015.10.08
스레드 생성과 종료  (0) 2015.10.06
admin