overlapped_io_모델

Download Report

Transcript overlapped_io_모델

to socket B
om one thread
to socket C
to socket D
쓰레드 관점에서 IO 중첩구간
Overlapped IO의 주안점
비동기 IO + 입출력 완료결과 확인
Event 오브젝트 사용하기
Completion Routine 사용하기
소켓
Overlapped 구조체
1. WSARecv, WSASend함수
소켓과 Overlapped구조체의
Event변수 안에 event오브젝트
연결 및 송수신시작
송신시는 보낼 정보 등록
수신시는 받은 정보 변수에 저장
2. 송수신이 끝나면 Overlapped 구조체의
Event변수 안에 event오브젝트는 signaled상태로
3. WSAWaitForMultipleEvents함수
Overlapped 구조체의 Event변수 안에
event오브젝트가 signaled 상태가 될 때까
지 기다림
4. WSAGetOverlappedResult함수
소켓과 Overlapped구조체 Overlapped 구조체의
Event변수 안에 event오브젝트를 통해
송수신된 정보를 확인
OS
소켓
2. IO가 완료되었는지 확인하고 싶을 때
alertable wait 상태를 만드는 함수들 중
하나를 호출
alertable wait 상태
1. WSARecv, WSASend함수
소켓 송수신시작
송신시는 보낼 정보 등록
수신시는 받은 정보 변수에 저장
OS가 소켓을 관리
3. OS가 alertable wait 상태인지
4. 완료된 IO가 있다면 이에 해당하는
Completion Routine을 OS가 호출
Completion Routine함수에서 송수신된
정보를 확인
5. Completion Routine이 실행되면
alertable wait 상태를 만드는 함수들은
모두 WAIT_IO_COMPLETION을 반환하면서
함수를 빠져 나옴