메인 CPU가 명령을 처리하는 연산 속도는 빠르지만 그에 비하면 I/O를 처리 하는 작업(장치의 디바이스 컨트롤러가 담당) 은 시간 소모가 아주 크다.
참조
I/O 작업 동안에 메인CPU는 Idle 상태가 되며, 작업을 할 수 있음에도 I/O 작업이 끝나는 동안 기다리는 비효율이 발생한다.
이런 비효율을 피하는 것만으로 성능상 이점을 얻을 수 있다.
I/O 작업동안 유저 프로세스는 중단, 끝날 때까지 대기한다. (CPU idle 상태)
I/O작업을 위해 kernel에 시스템 콜 하고 다시 제어권을 가져 옴 ( I/O 작업 동안 다른 일을 할 수 있다. )
중간중간 I/O 작업이 끝났는 지 확인(ex. Polling)
동기 처리, I/O 관점에서 I/O 요청 후 응답에 대한 처리를 요청한 녀석이 하는 것. 따라서, I/O 처리 완료 여부를 계속 확인해야 하고, 그렇기 때문에 작업이 순서대로 이루어짐. 동시에 여러 요청이 있는 경우에는 thread를 생성해 해당 작업에 대해 처리해야함. Multi-thread 환경이 됨.
비동기 처리, 요청의 응답 상태와 관계없이 다음 동작들을 수행한다. 그렇기 때문에 작업 순서를 보장하지 않음. I/O 작업이 백그라운드에서 돌아가고 마치면 시그널 전송 또는 콜백 형태로 유저프로세스에 알림. 요청에 대한 응답이 오면 콜백함수를 통해서 그 다음 작업들을 수행함. (콜백지옥이란 말이 나옴)