본문 바로가기
CS 지식/운영체제

[운영체제] I/O 처리 방식 : Synchronous/Asynchronous & Blocking/Non-Blocking

by CSEGR 2024. 8. 27.
728x90

✔️ Synchronous(동기) vs Asynchronous(비동기)

►Synchronous : 요청이 들어온 순서에 맞게 하나씩 처리하는 방식으로, 요청 후 결과가 와야만 다음 작업이 이루어짐.
              ↕︎
►Asynchronous : 하나의 요청이 끝나기 전에 다른 요청을 동시에 처리할 수 있는 방식

 

►Synchronous (동기)

출처: https://lu-coding.tistory.com/15

Synchronous(동기)의 경우 요청된 작업이 완료되어야 다음 작업을 수행한다. 

 

►Asynchronous (비동기)

출처 : https://lu-coding.tistory.com/15

Asynchronous(비동기)의 경우 요청된 작업의 완료 여부를 따지지 않고 바로 다음 작업을 수행한다.

호출되는 함수에게 callback을 전달해서 작업을 완료하면 실행하도록 한다. 

 

➕ Callback : 어떤 이벤트가 발생하거나 특정 작업이 완료되었을 때 시스템에 의해 자동으로 호출되는 함수로, 작업의 완료나 이벤트 발생을 알리기 위해 사용한다. 

 


✔️ Blocking vs Nonblocking 

한 작업이 다른 작업을 호출하는 경우, 호출되는 함수가 바로 리턴을 하는지의 여부에 따라 나뉜다. 

CPU 제어권(작업을 할 권리)이 어디에 있는지가 관건이다. 

►Blocking : 직접 제어할 수 없는 대상(ex-커널)의 작업이 끝날 때까지 기다려야 하는 경우 
          ↕︎
►Non-Blocking : 직접 제어할 수 없는 대상의 작업이 완료되기 전에 제어권을 넘겨받을 수 있는 경우

 

 

►Blocking 

ex) 호출하는 함수가 I/O 작업을 요청할 때 I/O 처리가 완료될 때까지 아무일도 하지 못하고 기다림. 

출처 : https://velog.io/@guswns3371

Blocking의 경우, 개발 부서 전체 작업의 제어권을 가진 팀장이 엔지니어 A에게 제어권을 넘긴다. 

엔지니어 A가 작업을 수행할 동안 개발 부서 전체는 이를 기다린다. 

엔지니어 A가 작업을 마치고 팀장에게 결과와 제어권을 돌려준다. 

→ 즉, 제어권이 없는 상태에서는 Blocking이 되며 다른 일을 할 수 없는 상태가 된다. 

 

 

►Non-Blocking

non-blocking의 경우 호출하는 함수가 I/O 작업을 요청한 뒤 I/O 작업에 대한 처리 완료 여부와 상관없이 바로 자신의 작업을 수행할 수 있다. 

출처: https://velog.io/@guswns3371

Non-Blocking의 경우, 엔지니어 A이 제어권을 받자마자 제어권을 다시 팀장에게 돌려준다. 

개발 부서는 엔지니어 A의 작업을 기다리지 않고, 다른 작업을 수행한다. 


1. Sync-Blocking (Synchronous + Blocking)

2. Sync-Nonblocking (Synchronous + Non-Blocking)

3. Async-Blocking (Asynchronous + Blocking)

4. Async-Nonblocking (Asynchronous + Non-Blocking)

 

✔️Sync-Blocking (Synchronous + Blocking)

출처: https://velog.io/@guswns3371

  • Synchronous
    기능 A가 기능 B보다 우선 개발되어야 하므로 엔지니어 A의 작업 종료 시간에 맞춰 엔지니어 B의 작업이 시작된다. 
  • Blocking
    엔지니어 A는 제어권을 가지게 되어 프로젝트 팀장은 다른 일을 못하고 기다리게 된다. 

✔️Sync-Nonblocking (Synchronous + Non-Blocking)

출처: https://velog.io/@guswns3371

  • Synchronous
    기능 A가 기능 B보다 우선 개발되어야 하므로 엔지니어 A의 작업 종료 시간에 맞춰 엔지니어 B의 작업이 시작된다.
  • Non-Blocking
    엔지니어A는 제어권을 받자마자 바로 팀장에게 반환한다. 프로젝트 팀장은 엔지니어 A의 작업이 종료될 때까지 기다리지 않고 주기적으로 결과를 확인하는 작업(polling)을 한다. 

✔️Async-Blocking (Asynchronous + Blocking)

출처: https://velog.io/@guswns3371

  • Asynchronous
    작업의 우선순위가 없으므로 기능 A가 기능 B보다 먼저 개발될 필요가 없다. 엔지니어 A와 B의 시간을 맞추지 않는다. 
  • blocking
    작업 우선순위가 없음에도 불구하고 프로젝트 제어권을 엔지니어 A가 가지고 있기 때문에 기능 A 개발이 종료될 때까지 기능 B를 개발할 수 없게 된다. 

✔️Async-Nonblocking (Asynchronous + Non-Blocking)

출처: https://velog.io/@guswns3371

  • Asynchronous
    작업의 우선순위가 없으므로 기능 A가 기능 B보다 먼저 개발될 필요가 없다. 엔지니어 A와 B의 시간을 맞추지 않는다. 
  • Non-blocking
    엔지니어A는 제어권을 받자마자 바로 팀장에게 반환한다. 엔지니어 A에게 기능 A 개발을 맡기고 다른 작업 수행한다. 

 

#참고

https://velog.io/@guswns3371/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Synchronous%EC%99%80-Asynchronous-Blocking%EA%B3%BC-Non-Blocking

https://steady-coding.tistory.com/531

https://developer-rabbit.tistory.com/m/174

728x90