Block I/O vs Non-Block I/O
by eelseungminBlock I/O
I/O 작업을 요청한 프로세스나 스레드가 요청이 완료될 때까지 block 되는 것(요청을 제외한 추가적인 작업이 불가능)을 의미한다.
Non-Block I/O
I/O 작업을 요청한 프로세스나 스레드를 block하지 않고 요청에 대한 현재 상태를 즉시 반환하는 것을 의미한다.
I/O 결과 처리 방식
1. 완료됐는지 계속해서 확인
Non-Block I/O 예시를 다시 한 번 살펴보자. 아래 그림에서 파란색으로 표시한 일련의 작업을 완료될 때까지 확인한다고 보면 된다.
1번 방식의 단점
데이터가 준비되었을 때 바로 작업 완료 여부를 확인하고 응답을 받아오면 좋겠지만, 아래 그림처럼 다시 작업 완료를 확인하기까지 약간의 시간 차가 발생할 수도 있다.
또한 반복적으로 작업 완료 여부를 확인하면서 CPU 낭비가 발생하게 된다.
2. I/O Multiplexing
특정 I/O 작업들을 동시에 모니터링하다가, 그중 완료된 I/O 작업들을 한꺼번에 알려주는 방식이다. 스레드 풀을 사용한다면 완료된 요청마다 준비된 스레드를 할당하는 방식으로 처리할 수도 있으며, 네트워크 통신에서 자주 사용되는 방식이다.
예시가 복잡해질 것을 우려해 아래 그림에서는 스레드가 read 도중 block 된 상태이며 준비된 데이터를 순차적으로 읽어온다고 가정했다.
3. Callback 혹은 Signal
AIO 라이브러리를 이용해 작업 완료 여부를 전달 받는 방식으로서 내부적으로 signal이나 callback 함수를 통해 완료 여부를 전달받도록 구현되어 있다.
'Note > etc' 카테고리의 다른 글
웹소켓 알아보기 (0) | 2024.09.08 |
---|---|
Synchronous vs Asynchronous (2) | 2024.06.30 |
SSR vs CSR (0) | 2024.04.06 |
System.out.print()로 로깅하지 않는 이유 (0) | 2024.03.31 |
블로그의 정보
eel.log
eelseungmin