정의
- 비동기적으로 I/O를 처리하는 방식으로 동기적 방식보다 더 빠르고 효율적인 IO 처리가 가능하다.
- 대표적인 asynchronous non-blocking I/O (AIO)는 Node.js가 있다.
IO 모델 발전 동향
1. 동기 블로킹 IO (Synchronous blocking I/O)
- IO 중 어플리케이션은 blocking 되며 커널에서 응답을 기다린다.
- 응답이 완료되면 사용자 버퍼로 돌아오면서 어플리케이션 블록은 풀림
- 개선 포인트
- 어플리케이션 관점에서 프로세싱이 오래 걸리는 것 같으나, 작업을 기다리기 위해 블록 되는 단점
2. 동기 넌블로킹 IO(Synchronous non-blocking I/O)
- 동기 블로킹 IO를 개선한 방법이나, 작업이 완료 됐는지 확이하기 위한 어플리케이션의 지속적인 system call
- 비효율적인 방식으로 IO 지연 발생
3. 비동기 블로킹 IO(Asynchronous blocking I/O)
- CallBack과 함께 호출 하여 비동기로 IO작업 수행이 가능하나 호출 후 Blocking이 된다.
4. 비동기 넌블로킹 IO(Asynchronous non-blocking I/O)
- CallBack과 함께 호출 하여 비동기로 IO작업 수행이 가능하고 동시에 다른 프로세스들에 대한 작업들도 가능
- 전체 요약 그림
면접 Q&A
- 질문 : async I/O란 무엇인가요?
- 답 : 호출되는 시스템콜(함수)로 callback을 전달 하여, 호출되는 함수의 작업이 완료되면, 그 호출되는 함수가 전달받은 callback을 실행하게 됩니다. 그 후 호출한 함수의 작업 완료 여부를 신경 쓰지 않는 IO 작업을 의미합니다.