Synchronous(동기), Asynchronous(비동기)

  • 컴퓨터 공학의 다양한 분야에서 동기와 비동기에 대한 내용들이 많이 나옵니다. 이와 관련해서 내용 정리가 필요하여 짧게 핵심만 정리합니다.
  • 동기와 비동기에 대해서 알아보려면 Blocking과 Non-Blocking에 대한 이해가 필요합니다. (보통 동기와 비동기를 설명하면서 같이 설명하는 경우가 많습니다. 따라서 이번 기회에 같이 알아보면 좋을 것 같아 추가로 정리합니다.)

Blocking, Non-Blocking

  • Blocking과 관련해서는 프로그램의 실행 순서와 함께 보면 이해하기 쉽습니다. Blocking I/O Model을 살펴보겠습니다.

Blocking I/O Model

Blocking I/O Model

  • Application이 System Call을 사용하여 어떤 요청을 전달한 경우, 시스템은 System Call에 대한 응답을 준비하여 반환하기 전까지 Application은 대기 상태에 들어갑니다. 위 그림에서 보인 wait for data 구간이 Application이 대기 상태에 들어간 상태입니다.
  • 대기 상태는 Wait Queue이라는 공간을 의미합니다.

Non-Blocking I/O Model

Non-Blocking I/O Model

  • Non-Blocking I/O Model의 경우, System Call에 대한 응답이 완료되지 않아도 반환합니다. 위 그림에서 EWOULDBLOCK이 이와 같은 경우를 의미합니다.
  • 따라서 Non-Blocking I/O Model은 Application이 Wait Queue에 들어가지 않습니다.

Blocking과 Non-Blocking의 차이점

  • Blocking은 System Call에 대한 응답을 기다리는 한편, Non-Blocking은 System Call에 대한 응답을 기다리지 않습니다.

Synchronous, Asynchronous

  • 위와 같은 관점에서 Synchronous와 Asynchronous도 어떤 작업 또는 요청에 대한 결과를 반환받는 시점을 기준으로 쉽게 구분할 수 있습니다.

Synchronous

Synchronous

  • 위 그림과 같이 Synchronous은 System Call이 끝날 때까지 기다리고, 결과를 가져옵니다.
  • Blocking과 유사한 구조입니다.

Asynchronous

Asynchronous

  • 위 그림과 같이 Asynchronous은 System Call이 끝날 때까지 기다리지 않습니다.
  • System Call이 완료가 되는 시점에 결과물을 가져옵니다.
  • Non-Blocking과 유사한 구조입니다.

Blocking과 Synchronous 차이점

  • Blocking은 Wait Queue에 들어가 System Call이 완료되기를 기다립니다.
  • Synchronous은 Wait Queue에 들어갈 수도 있고, 아닐 수도 있습니다.

Non-Blocking과 Asynchronous 차이점

  • Non-Blocking은 System Call에 대한 응답이 준비되면, 결과를 반환합니다. 하지만 응답이 준비되지 않는 경우 Error를 반환합니다.
  • Asynchronous은 System Call에 대한 응답이 준비되건, 아니든 관계없이 결과를 반환합니다. 이후 운영체제에서 결과가 준비되면 결과를 반환합니다.