I/O 처리 방식 - Blocking, Non-blocking I/O, Sync, Async

GREEN FIELD·2024년 9월 15일
0

Backend

목록 보기
2/2

I/O 요청을 처리하는 방식

메인 CPU가 명령을 처리하는 연산 속도는 빠르지만 그에 비하면 I/O를 처리 하는 작업(장치의 디바이스 컨트롤러가 담당) 은 시간 소모가 아주 크다.

참조

I/O 작업 동안에 메인CPU는 Idle 상태가 되며, 작업을 할 수 있음에도 I/O 작업이 끝나는 동안 기다리는 비효율이 발생한다.

이런 비효율을 피하는 것만으로 성능상 이점을 얻을 수 있다.

Blocking I/O

I/O 작업동안 유저 프로세스는 중단, 끝날 때까지 대기한다. (CPU idle 상태)

Non-Blocking I/O

I/O작업을 위해 kernel에 시스템 콜 하고 다시 제어권을 가져 옴 ( I/O 작업 동안 다른 일을 할 수 있다. )
중간중간 I/O 작업이 끝났는 지 확인(ex. Polling)

Sync와 Async

Sync(Synchronous) :

동기 처리, I/O 관점에서 I/O 요청 후 응답에 대한 처리를 요청한 녀석이 하는 것. 따라서, I/O 처리 완료 여부를 계속 확인해야 하고, 그렇기 때문에 작업이 순서대로 이루어짐. 동시에 여러 요청이 있는 경우에는 thread를 생성해 해당 작업에 대해 처리해야함. Multi-thread 환경이 됨.

Async(Asynchronous) :

비동기 처리, 요청의 응답 상태와 관계없이 다음 동작들을 수행한다. 그렇기 때문에 작업 순서를 보장하지 않음. I/O 작업이 백그라운드에서 돌아가고 마치면 시그널 전송 또는 콜백 형태로 유저프로세스에 알림. 요청에 대한 응답이 오면 콜백함수를 통해서 그 다음 작업들을 수행함. (콜백지옥이란 말이 나옴)

0개의 댓글