일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 방탈출 리뷰
- 홍대 방탈출 추천
- 유니티
- 홍대 덤앤더머
- C++ 자료구조
- 방탈출
- 윈도우 프로그래밍
- 이스케이퍼스
- 방탈출 후기
- 꽃길
- PC VR
- 시스템 프로그래밍
- Android
- 개발
- 강남 방탈출
- C#
- 넥스트에디션
- 추천
- 이스케이퍼스 2호점
- 정렬 알고리즘
- 2021 방탈출 추천
- 방탈출 추천
- Unity
- 필활
- 공포 방탈출
- C 자료구조
- 홍대
- 후기
- 홍대 방탈출
- 넥스트에디션 2호점
- Today
- Total
행복한 연어의 이야기
(윈도우 시스템) 19. 비동기 I/O와 APC 본문
1. 비동기(Asynchronous) I/O
ANSI 표준 입출력 함수를 하용해서 파일을 읽거나 쓰는 경우 작업이 완료될때까지
호출된 함수는 블로킹 상태에 놓이게 된다.
* 상태에 대한 설명은 5. 프로세스 생성과 소멸 에서 언급한 바 있다.
함수를 한번 호출하면 완료될때까지 블로킹되는 함수를 가르켜 블로킹(Blocking) 함수라고 한다.
블로킹 함수와 반대되는 개념으로 넌블로킹(Non-Blocking) 함수가 있다.
넌블로킹 함수란 작업의 완료와 상관없이 바로 함수를 반환하고 반환 후에도 작업이 계속되는 함수이다.
동기 I/O는 일이 완료되는 시점과 반환되는 시점이 같은 블로킹 I/O 함수를 주로 사용하고
비동기 I/O는 일이 완료되는 시점과 반환되는 시점이 다른 넌블로킹 I/O 함수를 주로 사용한다.
유튜브에서 동영상을 플레이 한다고 가정해보자
동영상에 대한 정보를 받고 영상을 플레이 할텐데
동영상 정보를 받는 함수가 블로킹 함수라면 동영상 정보를 다 받을때까지 영상을 플레이 할수가 없다.
(Bloking 상태가 아니게 될때까지 CPU에 의해 선택을 받을 수 없기 때문이다.)
만약 동영상 정보를 받는 함수가 블로킹 함수가 아닌 넌블로킹(Non-Blocking) 함수라면 얘기가 다르다.
함수 호출후 바로 반환하기 때문에 블로킹 상태가 아니게 되고
동영상 정보를 받으면서(반환 후에도 작업이 계속 된다.) 동영상 플레이도 같이 할 수 있게 된다.
그리고 이렇게 넌블로킹 I/O 함수를 이용하여 여러개의 I/O 함수를 실행시킬 수 있는데
이를 가르켜 중첩 I/O 라고 부른다. (여러개의 I/O 연산을 중첩 할수 있다는 뜻이다.)
또한 이렇게 실행되는 각각의 I/O 마다 일이 완료된 뒤 실행할 함수(루틴)를 실행하도록 할 수있는데
이렇게 실행되는 루틴을 완료루틴이라고 부른다.
2. APC(Asynchronous Procedure Call)
I/O 가 완료되고 나면 Window 가 어떻게 알고 완료루틴을 실행하는지 작동하는 원리를 알아보자
APC 는 비동기 함수 호출 메커니즘을 의미한다.
APC 의 구조
APC는 크게 User-mode APC 와 Kernel-mode APC 2가지 종류로 나뉘고
Kernel-mode APC 는 Normal kernel-mode APC 와 Special kernel-mode APC 로 나뉜다.
모든 쓰레드는 자신만의 APC Queue 라는 것을 가지고 있다.
I/O 완료시 APC Queue 에 저장되고
쓰레드가 알림 가능한 상태(Alertable State)가 될때
APC Queue 에 있는 완료루틴을 실행한다.
알고 넘어가야할 것
1. 비동기 I/O, 동기 I/O, 블로킹 함수, 넌블로킹 함수, 중첩, 완료루틴 에 대한 설명
2. 중첩 I/O, 완료루틴 I/O 이해
'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.
'IT > 윈도우 시스템 프로그래밍' 카테고리의 다른 글
(윈도우 시스템) 21. Dynamic Linking Library(DLL) (0) | 2021.09.01 |
---|---|
(윈도우 시스템) 20. 메모리 관리 (0) | 2021.08.30 |
(윈도우 시스템) 18. 파일 I/O와 디렉터리 컨트롤 (0) | 2021.08.25 |
(윈도우 시스템) 17. 구조적 예외처리(SEH) 기법 (0) | 2021.08.23 |
(윈도우 시스템) 16. 컴퓨터 구조 네번째 (0) | 2021.08.20 |