Synchronous(동기), Asynchronous(비동기)# 컴퓨터 공학의 다양한 분야에서 동기와 비동기에 대한 내용들이 많이 나옵니다. 이와 관련해서 내용 정리가 필요하여 짧게 핵심만 정리합니다. 동기와 비동기에 대해서 알아보려면 Blocking과 Non-Blocking에 대한 이해가 필요합니다. (보통 동기와 비동기를 설명하면서 같이 설명하는 경우가 많습니다. 따라서 이번 기회에 같이 알아보면 좋을 것 같아 추가로 정리합니다.) Blocking, Non-Blocking# Blocking과 관련해서는 프로그램의 실행 순서와 함께 보면 이해하기 쉽습니다. 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의 경우, 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은 System Call이 끝날 때까지 기다리고, 결과를 가져옵니다. Blocking과 유사한 구조입니다. 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에 대한 응답이 준비되건, 아니든 관계없이 결과를 반환합니다. 이후 운영체제에서 결과가 준비되면 결과를 반환합니다.