본문 바로가기

Computer Science/운영체제

동기와 비동기

동기와 비동기

동기와 비동기

 

  • 동기와 비동기는 데이터를 받는 방식을 말합니다.
  • 동기와 비동기로 작성한 코드의 가장 큰 차이 중 하나는 런타임 시에 발생하는 지연시간(latency)입니다.

 

동기 (Synchronous : 동시에 일어나는)

  • 동기는 말 그대로 동시에 일어난다는 뜻입니다. 요청과 그 결과가 동시에 일어난다는 약속으로, 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.
    • A노드와 B노드 사이의 작업 처리 단위(Transaction)를 동시에 맞춥니다.
  • 동기식 처리 모델(Synchronous Processing Model)은 직렬적으로 태스크(Task)를 수행합니다.
  • 즉, 태스크는 순차적으로 실행되며 어떤 작업이 수행 중이면 다음 작업은 대기하게 됩니다.
  • 예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때, 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 태스크들은 블로킹(Blocking, 작업 중단)됩니다.
  • 이러한 이유 때문에 동기적 방식은 잘 사용되지 않습니다. 하지만 동기 방식이 전혀 사용되지 않는 것은 아닙니다. ATM 기계, 키오스크, 단순 단말기 같은 방식은 이런 동기적인 방식을 따르고 있습니다.

 

 

비동기 (Asynchronous : 동시에 일어나지 않는)

  • 비동기는 동시에 일어나지 않는다를 의미합니다. 요청과 결과가 동시에 일어나지 않을 거라는 약속입니다.
    • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 됩니다.
  • 비동기식 처리 모델(Asynchronous Processing Model 또는 Non-Blocking Processing Model)은 병렬적으로 태스크를 수행합니다.
  • 즉, 태스크가 종료되지 않은 상태라 하더라도 대기하지 않고 다음 태스크를 실행합니다.
  • 예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 태스크를 수행할 때, 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 태스크를 수행합니다. 이후 서버로부터 데이터가 응답되면 이벤트가 발생하고 이벤트 핸들러가 데이터를 가지고 수행할 태스크를 계속해서 수행합니다.
  • 자바스크립트 대부분의 DOM 이벤트와 Timer 함수(setTimeout, setInterval), Ajax 요청은 비동기식 처리 모델로 동작합니다.

 

동기와 비동기의 장단점

  • 동기
    • 설계가 매우 간단하고 직관적이지만, 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 있습니다.
    • 동기 방식의 장점은 코드를 파악하기 쉽고 유지보수, 디버깅이 훨씬 쉽습니다. 코드가 순서대로 실행되기 때문에 Breakpoint를 한 단계씩 늘려가면서 디버깅을 한다면 에러를 발견하는 것이 매우 용이할 것입니다.
    • 하지만 이런 동기 방식은 싱글 스레드를 사용하는 자바스크립트에서 문제가 되는 경우가 많습니다. 예를 들어, 데이터베이스 작업이 완료되어 데이터가 오기까지 기다린다면, 애플리케이션은 유휴(Idle) 상태가 되고, 다른 작업을 할 수 있는 시간이 낭비됩니다.
  • 비동기
    • 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.
  • 동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이입니다. 동기는 추구하는 같은 행위(목적)가 동시에 이루어지며, 비동기는 추구하는 행위(목적)가 다를 수도 있고, 동시에 이루어지지도 않습니다.

 

 

Blocking과 Non-Blocking의 차이

  • Blocking은 호출된 함수가 자신의 작업을 끝낼 때까지 제어권을 가지고 있어서 호출한 함수가 대기하도록 만드는 것입니다.
  • Non-Blocking은 호출된 함수가 바로 return해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있게 하는 것입니다.

 

 

 

References

 

'Computer Science > 운영체제' 카테고리의 다른 글

프로세스 스케줄링  (0) 2021.03.23
문맥교환(Context-Switching)  (0) 2021.03.23
교착상태와 기아상태  (0) 2021.03.23
Process와 Thread  (0) 2021.03.23