비동기 I/O와 동기 I/O
- 동기 I/O의 경우
-> Write라는 함수 호출이 되는 순간 데이터가 전송되고 함수가 반환되는 순간이 데이터 전송이 끝나는 순간이라 하면 함수의 호출과 데이터 전송이 동기화 되어 있고 함수의 반환과 데이터 전송의 끝이 동기화 되어 있음
-> Write함수 호출이 되면 데이터 전송이 끝나기 전까지는 반환이 되지 않기 때문에 다른 일을 할 수 없음
-> CPU 사용 내용을 보면 CPU를 원활히 사용하지 못하는 모습을 보이는데 I/O 연산때문에 CPU가 blocking 된것을 볼 수 있음
- 비동기 I/O의 경우
-> Write라는 함수 호출이 되는 순간 데이터가 전송되는 것은 똑같지만 함수가 반환하는 시점이 데이터 전송의 끝을 의미하지는 않음
-> Write함수가 호출되자마자 함수를 반환하고 내부적으로 데이터를 전송을 하는 것이 비동기 I/O의 특징
-> Write함수가 호출되지마자 함수가 반환하기 때문에 또 다른 일을 할 수 있음
-> I/O는 CPU에 의존성이 낮기 때문에 가능한 일
-> CPU 사용 내용을 보면 CPU를 계속 사용하고 있는 것을 볼 수 있고 CPU가 일을 할 수 있는 적절한 양을 분배 후 동시에 I/O 연산을 진행중인 것
- 비동기 I/O가 좋다고 해서 무조건 비동기 I/O로 작성해야할 필요는 없음
비동기 I/O의 종류
- 중첩 I/O
-> I/O 함수를 호출하고 반환되기 전에 다른 I/O를 중첩하여 호출하는 방식
-> CPU는 I/O를 진행할 때 느리기도 하고 기다리는 시간이 있는데 동시에 여러 I/O를 중첩하여 진행을 하면 기다리는 시간을 줄일 수 있음
- 완료 루틴 기반 I/O
-> I/O 연산이 끝나고 하는 부가 작업을 하기 위해 I/O가 끝났는지 확인을 해줘야 하는데 어떤 I/O가 끝났는 지 일일이 확인하는 것은 부담스러운 작업인데 이 문제를 해결하기 위해 등장
-> 각 I/O가 끝났을 때 실행하는 루틴(함수)를 묶어 끝나면 자동으로 실행할 수 있게 해줌
-> 어떤 I/O가 끝났는지 따로 확인할 필요가 없음
'Programming > System Programming' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(4) (0) | 2020.08.22 |
---|---|
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(3) (0) | 2020.08.22 |
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(1) (0) | 2020.08.18 |
윈도우즈 시스템 프로그래밍 - 18. 파일 I/O와 디렉토리 컨트롤(2) (0) | 2020.08.17 |
윈도우즈 시스템 프로그래밍 - 18. 파일 I/O와 디렉토리 컨트롤(1) (0) | 2020.08.17 |