쓰레드 관점에서 IO 중첩구 간

5
쓰쓰쓰 쓰쓰쓰쓰 IO 쓰쓰쓰쓰 om one thread to socket B to socket C to socket D Overlapped IO 쓰 쓰쓰쓰 쓰쓰쓰 IO + 쓰쓰쓰 쓰쓰쓰쓰 쓰쓰

description

to socket B. From one thread. to socket C. t o socket D. 쓰레드 관점에서 IO 중첩구 간. Overlapped IO 의 주안점 비동기 IO + 입출력 완료결과 확인. Event 오브젝트 사용하기. Receiver WSASocket () Bind() Listen() Accept() WSARecv () == SOCKET_ERROR WSAGetLastError () == WSA_IO_PENDING WSAWaitForMultipleEvents () - PowerPoint PPT Presentation

Transcript of 쓰레드 관점에서 IO 중첩구 간

Page 1: 쓰레드  관점에서  IO  중첩구 간

쓰레드 관점에서 IO 중첩구간

From one thread

to socket B

to socket C

to socket D

Overlapped IO 의 주안점비동기 IO + 입출력 완료결과 확인

Page 2: 쓰레드  관점에서  IO  중첩구 간

ReceiverWSASocket()

Bind()

Listen()

Accept()

WSARecv() == SOCKET_ERROR

WSAGetLastError() == WSA_IO_PENDING

WSAWaitForMultipleEvents()

WSAGetOverlappedResult()

senderWSASocket()

Connect()

WSASend() == SOCKET_ERROR

WSAGetLastError() == WSA_IO_PENDING

WSAWaitForMultipleEvents()

WSAGetOverlappedResult()

Event 오브젝트 사용하기

Page 3: 쓰레드  관점에서  IO  중첩구 간

Completion Routine 사용하기

ReceiverWSASocket()

Bind()

Listen()

Accept()

WSARecv() == SOCKET_ERROR

WSAGetLastError() == WSA_IO_PENDING

idx = WSAWaitForMultipleEvents(~, TRUE)

void CALLBACK CompRoutine()

If(idx == WAIT_IO_COMPLETION)

senderWSASocket()

Connect()

WSASend() == SOCKET_ERROR

WSAGetLastError() == WSA_IO_PENDING

idx = WSAWaitForMultipleEvents(~, TRUE)

void CALLBACK CompRoutine()

If(idx == WAIT_IO_COMPLETION)

Page 4: 쓰레드  관점에서  IO  중첩구 간

소켓 Overlapped 구조체

1. WSARecv, WSASend 함수소켓과 Overlapped 구조체의Event 변수 안에 event 오브젝트연결 및 송수신시작송신시는 보낼 정보 등록수신시는 받은 정보 변수에 저장

2. 송수신이 끝나면 Overlapped 구조체의Event 변수 안에 event 오브젝트는 signaled 상태로 바뀜

4. WSAGetOverlappedResult 함수소켓과 Overlapped 구조체 Overlapped 구조체의 Event 변수 안에 event 오브젝트를 통해송수신된 정보를 확인

3. WSAWaitForMultipleEvents 함수 Overlapped 구조체의 Event 변수 안에 event 오브젝트가 signaled 상태가 될 때까지 기다림

Page 5: 쓰레드  관점에서  IO  중첩구 간

1. WSARecv, WSASend 함수소켓 송수신시작송신시는 보낼 정보 등록수신시는 받은 정보 변수에 저장OS 가 소켓을 관리

2. IO 가 완료되었는지 확인하고 싶을 때alertable wait 상태를 만드는 함수들 중 하나를 호출

OS

3. OS 가 alertable wait 상태인지

소켓

4. 완료된 IO 가 있다면 이에 해당하는 Completion Routine 을 OS 가 호출Completion Routine 함수에서 송수신된 정보를 확인

5. Completion Routine 이 실행되면 alertable wait 상태를 만드는 함수들은 모두 WAIT_IO_COMPLETION 을 반환하면서 함수를 빠져 나옴

alertable wait 상태