will come true

동기(Synchronous)와 비동기(Asynchronous) 본문

Etc.

동기(Synchronous)와 비동기(Asynchronous)

haehyun 2022. 7. 27. 18:07

동기, 비동기 라는 단어는 데이터 통신 및 네트워크 분야를 공부하다 보면 등장하는 개념이다. 둘 다 데이터를 요청하는 쪽과 요청받은 데이터를 처리·전달하는 쪽 간의 데이터를 주고받는 방식을 일컫으며, 이 데이터 전달 방식의 차이에 따라 동기/비동기가 나뉜다. 두 단어의 사전적 정의는 아래와 같다.

  • 동기(synchronous)
    • 동시 발생[존재]하는
    • 실시간의 (강의가 따로 녹음되거나 미리 올라와 있는 형태가 아니기 때문에 실시간으로 참여해서 운영되는 형태의)
    • 주기적인 운동을 하는 개체들이 서로 영향을 주고받거나 받게 됨으로써, 동일한 주기를 갖게 되는 것. 그러한 현상을 동기현상이라 하고, 동기된 상태를 동기화 되었다고 한다.
    • [통신] 주로 서로 다른 시스템이나 네트워크에서 클럭 주파수나 비트, 프레임, 워드 등을 일치시키는데 사용된다.
    • [쓰레드] 작업을 순차적으로 처리하는 것.
  • 비동기(asynchronous)
    • 동시에 발생[존재]하지 않는
    • 실시간 교육이 아닌 (정시에 이루어지는 교육이 아니어서 학생들이 자신의 일정에 맞춰 수업을 듣거나 과제를 올릴 수 있는 형태의)
    • [쓰레드] 동시에 여러 작업을 처리하는 것.

 

동기(Synchronous)

  • 요청과 그 결과가 동시에 일어난다는 약속.
  • 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
  • 노드 사이의 작업 처리 단위를 동시에 맞추겠다.
  • 요청과 결과가 동시에 발생한다. 무슨 작업이든 요청이 결과보다 먼저 발생하니까, 요청-결과가 동시에 발생한다는 말은 요청이 결과의 타이밍을 기다려준다는 것과 같다.
  • 같은 일을 동시에 진행해야 하는 작업에는 동기 방식을 사용해야 한다.
    e.g.) 계좌이체 : A가 B에게 10,000원을 송금할 때 A계좌-10,000원 / B계좌+10,000원 두 일이 동시에 발생해야 한다.

동기 방식의 장단점

  • 장점👍 : 설계가 매우 간단하고 직관적이다. (요청-결과 한 세트로 처리되니까)
  • 단점👎 : 요청에 대한 결과가 주어질 때까지 아무것도 못하고 대기해야 한다.

 

비동기(Asyncronous)

  • 요청과 그 결과가 동시에 일어나지 않을거라는 약속.
  • 요청한 그 자리에서 결과가 주어지지 않는다.
  • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
  • 서로의 작업 목적이 다르면 둘의 작업 처리기간이 일치하지 않아도 된다. 즉, 비동기는 각자가 추구하는 행위가 다를 수도 있고, 동시에 일어나지 않을 수도 있다.

비동기 방식의 장단점

  • 장점👍 : 요청에 대한 결과가 주어지는 데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.(*동시성)
  • 단점👎 : 처리 로직이 동기보다 복잡하다.

 

A가 B에게 행위를 요청하고, B가 이에 응답해 완수한 결과를 A에게 돌려주기까지 일련의 작업 흐름이 아래와 같을 때,

  1. A가 B에게 자신의 데이터를 넘기며 결과를 요청
  2. B가 A의 데이터를 읽어들여 연산 수행
  3. B가 A에게 결과를 반환

비동기에서는 A가 요청을 던진 후인 2~3 단계 시점에 A는 B와 전혀 상관없는 개인 작업을 진행할 수 있다. B와 관련된 작업은 1이 끝나는 시점에서 이미 A의 손을 떠난 셈이다. 이런 특성 탓에 비동기동시성 프로그래밍이 함께 언급되는 것이다. (=비동기 방식을 사용하면 동시성 프로그래밍을 실현할 수 있다.) 만약 동기 방식이었다면 B가 결과를 내고 A에게 돌려주기 까지의 2~3단계 동안 꼼짝없이 결과를 무한정 기다리고 있어야 한다.(B의 결과가 나오기 까지 시간이 얼마나 오래 걸리든)

 

동기와 비동기 비교

  동기 비동기
자원 사용률 비효율적 효율적
복잡도 낮음 높음

 

Comments