[네트워크] Blocking & Non-blocking IO

xoey·2025년 1월 9일

네트워크

목록 보기
10/10
post-thumbnail

1. I/O 작업이란?

I/O(Input/Output)는 컴퓨터나 서버가 파일을 읽거나, 네트워크 통신을 하거나, 데이터베이스에서 데이터를 주고받는 작업을 의미한다. 예를 들어, 네트워크에서 한 컴퓨터가 데이터를 보내고(send), 다른 컴퓨터가 그 데이터를 받는(read) 것을 I/O 작업이라고 한다.

I/O는 User 레벨에서 직접 수행할 수 없고, Kernel에서 수행된다. 유저 프로세스는 커널에 요청만 할 수 있고, 결과과 반환될 때까지 기다리게 된다.

2. Blocking I/O

I/O 작업이 진행되는 동안, 유저 프로세스가 차단되어 기다리는 방식이다.

📌 동작 방식

  1. 유저가 커널에 read 작업을 요청하면, 제어권을 커널에 넘겨준다.
  2. 데이터가 입력될 때까지 유저는 대기하며, 다른 작업을 할 수 없다.
  3. 데이터가 입력되고 나서야 커널이 유저에게 결과를 전달하며, 유저는 제어권을 다시 받아 작업을 재개할 수 있다.

이 방식은 다른 작업을 진행하지 못하기 때문에 자원이 낭비된다는 단점이 있다.

3. Non-blocking I/O

I/O 작업이 진행되는 동안에도 유저 프로세스가 차단되지 않고 다른 작업을 계속 진행할 수 있는 방식이다.

📌 동작 방식

  1. 유저가 커널에 read 작업을 요청하면, 바로 결과가 반환된다.
  2. 입력된 데이터가 없으면 커널은 EWOULDBLOCK 메세지를 반환하여 데이터가 없다는 것을 알린다.
  3. 유저는 제어권을 유지하며 다른 작업을 계속 진행할 수 있다. 데이터가 준비될 때까지 1, 2번 과정을 반복한다.
  4. 데이터가 입력되면 커널은 그 데이터를 유저에게 전달해준다.

이 방식은 프로그램이 멈추지 않고 계속 작업을 진행할 수 있다는 장점이 있다.


Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글