[OS] Blocking vs Non-blocking, Sync vs Async

HD.·2022년 4월 27일
0

CS

목록 보기
2/7

Blocking/Non-Blocking과 Sync/Async 개념에 대해 정리해보려고한다.
추상적인 개념이고 개발자마다 의견도 조금씩 다르고 정확한 구분법은 없는 것 같지만 나름대로 공부한내용을 적어보려고한다.

Blocking/Non-blocking과 Sync/Async는 관점의 차이이다.
Blocking/Non-blocking은 함수의 제어권의 관점에서 바라보는 것이고
Sync/Async 함수의 처리 결과에 관점을 두는 것이다.

Blocking

  • 호출된 함수가 호출한 함수에게 제어권을 다시 넘겨 주지 않는 것
  • 함수A가 함수B를 호출했을 때 함수B가 끝날 때까지 제어권을 가지고 함수A는 Block상태가 되는 것을 말한다.

Non-blocking

  • 호출된 함수가 호출한 함수에게 제어권을 바로 넘겨주는 것
  • 함수A가 함수B를 호출했을 때 함수B가 제어권을 바로 다시 함수A에게 넘겨주어 함수A가 다른 일을 할 수 있도록 하는 것을 말한다.

Synchronous

  • 호출된 함수의 결과를 호출한 함수가 처리하는 것을 말한다.
  • 함수A가 함수B를 호출했을 때 함수B의 결과값을 함수A가 처리할 경우를 말한다.

Aynchronous

  • 호출된 함수의 결과를 호출한 함수가 처리하지 않고 호출된 함수가 처리하는 것을 말한다.
  • 함수A가 함수B를 호출했을 때 함수B의 결과값을 함수B가 처리할 경우를 말한다.

위 네가지를 조합해서 발생할 수 있는 네 가지 모델에대해 OS관점에서 알아보자
아래 그림은 Linux에서 사용할 수 있는 I/O 모델들을 매트릭스로 표현한 것이다. 하니씩 알아보기로 하자.
Simplified matrix of basic Linux I/O models

blocking / Synchronous

  • 가장 일반적인 모델로 응용 프로그램이 일시적으로 차단되는 시스템 콜을 하게되는 경우이다. 즉, 호출하는 응용 프로그램은 CPU를 사용하지 않고 응답을 기다리는 상태(Blocked)가 되고 시스템 콜이 완료 될 때까지 기다린다.
  • 위 그림 처럼 Read 시스템 콜이 일어나면 애플리케이션은 차단되고 컨텍스트가 커널로 전환된다. 그런 다음 읽기가 시작되고 응답이 반환되면 데이터가 사용자에게 넘어가게 된다. 그런 다음 응용 프로그램의 blocked 상태가 해제된다.

Non-blocking / Synchronous

  • 이 모델은 blocking / Synchronous 모델보다 조금 비효율적인 방식이다.
  • 애플리케이션은 시스템 콜 이후에 차단되지 않고 즉시 리턴을 받지만 해당 리턴에는 작업을 완료하지 못 했다는 에러 코드를 받게된다.
  • 애플리케이션은 차단되지 않지만 read 작업이 완료되었는지 확인하기 위해 수많은 시스템 콜을 하게 되기때문에 비효율적일 수 있다.

Non-blocking / Asynchronous

  • 마지막으로 Non-blocking / Asynchronous 모델은 I/O 작업을 동시에 처리하는 방식이다.
  • 시스템 콜을 한 후에 바로 정상적으로 시스템 콜을 했다는 리턴을 받고 어플리케이션은 다른 작업을 수행한다. 이 후 I/O작업이 완료되었다는 신호와 데이터를 받게되면 해당 작업을 마무리한다.
  • 하나 이상의 I/O 요청을 처리중일 때 CPU는 다른 일은 할 수 있기 때문에 매우 효율적이다.
profile
즐거워야코딩

0개의 댓글