본문 바로가기
Knowledge/CS

block I/O VS non-block I/O 개념

by YoonJong 2022. 8. 11.
728x90

block I/O 와 non-block I/O 가 어떻게 동작하는지 알아본다.

 

 

block I/O

 - I/O 작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 블락됨(기다림)

스레드가 read blocking system call 을 실행하게 되면 블락된다

커널에서는 read I/O를 실행한다.

시간이 지나고 응답을 주면 커널이 응답을 받고 data를 커널에서 user로 옮긴다.

위 과정을 거치고 스레드는 깨어나서 다시 일을 진행한다.


non-block I/O

 - 프로세스/스레드를 블락시키지 않고 요청에 대한 현재 상태를 즉시 리턴

스레드가 read non-blocking system call 을 실행한다.

커널모드로 컨택스트 스위칭이 되고, 커널에서는 read I/O 작업을 실행한다.

그리고 바로 리턴을 시킨다.

스레드는 이어서 다른 코드를 실행시킬 수 있다.

커널에서는 응답을 보낼 준비가 되었고 기다리고 있다.

스레드에서  read non-blocking system call 을 실행하면, 데이터를 받는다.

스레드에서는 다시 작업을 실행한다. 

 


non-blocking 에서는 한가지 이슈가 있다. 

read I/O 작업을 어떻게 확인해야할까?

1. 완료됐는지 반복적으로 확인한다.

 - 스레드가 다른 작업을 하다가 반복적으로 확인을 하면 확인하는 시간에 대한 처리속도가 느려질 수 있다.
 - CPU 낭비가 발생한다.

 

2. I/O multiplexing (다중 입출력) 사용

 - 관심있는데 I/O작업들을 동시에 모니터링하고 그 중에 완료된 I/O 작업들을 한번에 알려준다.

 -  epoll(리눅스) / kqueue(맥os) / IOCP(I/O completion port / 윈도우) 에서 사용

 - 네트워크 통신에 많이 사용

 

 3. Callback / singnal 사용

 - callback / signal 을 통해 처리된다

 - 널리 사용되지는 않는다.

 

 

참고

https://www.youtube.com/watch?v=mb-QHxVfmcs 

https://musma.github.io/2019/04/17/blocking-and-synchronous.html

 

동기와 비동기, 그리고 블럭과 넌블럭

무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비

musma.github.io

https://jh-7.tistory.com/25

 

Blocking, Non-blocking, Sync, Async 의 차이

들어가며 전 회사에서 한 선배님이 질문을 했다. Blocking 과 Non-blocking, Sync 와 Async 의 차이를 설명할 수 있냐고. 어 음... 하는 사이 선배님이 다시 말을 했다. 그 둘을 설마 같은거라고 이해하고 계

jh-7.tistory.com

728x90

댓글