IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 19장. 비동기 I/O와 APC

shine94 2025. 3. 1. 20:25

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr


https://www.inflearn.com/course/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/dashboard

 

[지금 무료]뇌를 자극하는 윈도우즈 시스템 프로그래밍 강의 | 한빛미디어 - 인프런

한빛미디어 | , [사진] 1. 강좌 소개 한빛미디어(주) 에서 발간한 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 의 저자 윤성우 님이 직접 강의하는 온라인 강좌입니다. 이미 여러 저서와 온라인

www.inflearn.com

 

 

 

 

* 블로킹(Blocking) 함수

   호출되면 작업이 완료될 때까지 반환하지 않는 함수

 

* 동기(Synchronous) I/O - 블로킹 함수

   블로킹 함수를 활용한 입출력 연산

 

넌블로킹(Non-Blocking) 함수 - 넌블로킹 함수

   작업의 완료 여부와 상관없이 즉시 반환하는 함수

 

* 비동기(Asynchronous)I/O

   작업이 완료되기 전에 다른 처리를 계속할 수 있는 입출력 방식

 

* Windows에서는

   기본적으로 중첩(Overlapped) I/O 방식, 완료루틴(Completion Routine) 확장 I/O 방식

   이 두 가지 방식의 비동기 I/O를 지원한다

 

(1) 중첩(Overlapped) I/O

WriteFile 함수

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-writefile

 

WriteFile 함수(fileapi.h) - Win32 apps

지정된 파일 또는 I/O(입출력) 디바이스에 데이터를 씁니다.

learn.microsoft.com

 

GetOverlappedResult 함수

https://learn.microsoft.com/ko-kr/windows/win32/api/ioapiset/nf-ioapiset-getoverlappedresult

 

GetOverlappedResult 함수(ioapiset.h) - Win32 apps

지정된 파일, 명명된 파이프 또는 통신 디바이스에서 겹치는 작업의 결과를 검색합니다.

learn.microsoft.com

 

(2) 완료루틴(Completion Routine) I/O

WriteFileEx 함수

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-writefileex

 

WriteFileEx 함수(fileapi.h) - Win32 apps

지정된 파일 또는 I/O(입출력) 디바이스에 데이터를 씁니다. 쓰기가 완료 또는 취소되고 호출 스레드가 경고 대기 상태에 있을 때 완료 상태를 비동기적으로 보고하고, 지정된 완료 루틴을 호출

learn.microsoft.com

 

ReadFileEx

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-readfileex

 

ReadFileEx 함수(fileapi.h) - Win32 apps

지정된 파일 또는 I/O(입력/출력) 디바이스에서 데이터를 읽습니다. 읽기가 완료 또는 취소되고 호출 스레드가 경고 대기 상태에 있을 때 완료 상태를 비동기적으로 보고하고, 지정된 완료 루틴

learn.microsoft.com

 

SleepEx

https://learn.microsoft.com/ko-kr/windows/win32/api/synchapi/nf-synchapi-sleepex

 

SleepEx 함수(synchapi.h) - Win32 apps

지정된 조건이 충족될 때까지 현재 스레드를 일시 중단합니다.

learn.microsoft.com

 

* APC(Asynchronous Procedure Call)

   비동기 함수 호출 메커니즘

   User-mode APCKernel-mode APC로 나뉨

 

* User-mode APC

   모든 쓰레드는 자신만의 APC Queue라는 것을 가지고 있다

   APC Queue에는 비동기적으로 호출되어야 할 함수들과 매개변수 정보가 저장된다

   저장되었다고 바로 호출되는 것이 아니라, 쓰레드가 알림 가능 상태(Alertable State)에 놓이게 될 때 비로소 호출된다

 

* INVALID_HANDLE_VALUE

   ㄴ 유효하지 않는 핸들을 나타내는 특별한 값

   ㄴ -1을 LONG_PTR로 변환 후 다시 HANDLE로 변환