Blocking, Non-Blocking I/O

오늘은 Quarkus Reactive에 대해 알아보다 Non-blocking I/O에 대한 개념을 모르고 있다는 느낌이 들어 간단하게 I/O에 대해 공부하고 정리해 봤다.

 

I/O란?


데이터의 입력(Input)과 출력(Output)을 함께 일컫는 말로 컴퓨터에서 데이터를 주고받는 과정을 말한다.

여기서 말하는 데이터는 사용자로부터의 입력, 네트워크 통신을 통해 전송되는 데이터, 파일에 쓰는 데이터 등 다양한 형태를 가질 수 있다.

 

Blocking I/O


I/O 작업이 진행되는 동안 프로세스는 자신의 작업을 중단한 채 완료될때 까지 대기하는 방식이다.

 

Blocking I/O는 작업이 완료될 때까지 프로그램이 중단되기 때문에 자원을 비효율적으로 사용한다는 단점이 존재한다.

 

 

Non-Blocking I/O


I/O 작업이 진행되는 동안 실행 프로세스를 중단(block)하지 않는 방식을 말한다.

즉, Non-blocking I/O를 사용하는 시스템은 I/O 작업을 요청하고 그 결과를 기다리는 대신, 다른 작업을 계속 수행한다.

 

Blocking I/O 방식과 다르게 I/O 작업이 완료되기를 기다리는 동안 CPU가 멈춰있는 상태가 되는 것을 막기 때문에 애플리케이션의 전체적인 성능 향상을 기대할 수 있다.

 

 

 

I/O Thread


I/O Thread는 시스템에서 데이터를 읽거나 쓰는 작업을 수행하는 스레드를 말한다.

이러한 스레드는 일반적으로 디스크 또는 네트워크로부터 데이터를 읽어 오거나, 디스크 또는 네트워크로 데이터를 쓰는 작업을 담당한다.

이런 식으로 I/O 스레드를 사용하면 프로그램이 병렬로 데이터를 읽거나 쓸 수 있다. 병렬로 처리하기 때문에 전체 시스템의 성능을 향상시킬 수 있다.

 

Concurrent I/O


concurrent I/O는 단어 그대로 동시에 여러 I/O 작업을 처리하는 것을 말한다. 이는 여러 프로세스 또는 스레드가 동시에 I/O 작업을 수행할 수 있게 하기 때문에 성능 향상을 기대할 수 있다.

 

concurrent I/O는 네트워크 서버와 같은 고성능 시스템에서 중요합니다. 예를 들어, 웹 서버는 한 번에 수천 개의 동시 연결을 처리해야 할 수 있습니다. 이런 상황에서 concurrent I/O는 각 연결에 대한 I/O 작업을 독립적으로 처리할 수 있게 해주므로, 서버의 전체 성능을 크게 향상시킬 수 있습니다.

I/O 작업은 일반적으로 CPU 작업에 비해 상당히 느립니다. 따라서 I/O를 효율적으로 처리하면 전체 시스템 성능에 큰 영향을 미칩니다. 이는 I/O threads의 사용과 concurrent I/O의 적용을 통해 이루어집니다.

 

Worker Thread


worker thread는 어떤 특정 작업을 처리하기 위해 생성된 스레드를 말한다. 주로 CPU 집중적인 작업을 수행하며, 이러한 작업을 백그라운드에서 실행하여 메인 스레드가 사용자 인터페이스와 상호 작용하는 데 방해받지 않게 한다.

워커 스레드는 프로그램의 메인 스레드로부터 분리되어 있으므로, 메인 스레드가 다른 중요한 작업에 집중할 수 있게 해준다.

'OS' 카테고리의 다른 글

CPU 스케줄링과 알고리즘  (0) 2023.01.12
프로세스란? (PCB, Context Switching)  (0) 2023.01.04