Overlapped 모델(1)
Server/Winodw Network 2015. 10. 25. 22:19Overlapped 모델은 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 |