티스토리 뷰

728x90

동기 (Synchronous) vs 비동기(Asynchronous)

동기와 비동기의 차이를 간략하게 보면 직렬식, 병렬식 구조라고 볼 수 있다. 즉 동기가 직렬식이며 비동기가 병렬식으로 작동한다.

왼쪽이 동기식 방식이며 하나의 태스크가 끝날 때까지 기다렸다가 다음 태스크가 실행된다. 총 실행 시간으로 따지자면 '동기' 방식이 더 느리다.

오른쪽이 비동기식 방식이다. 한번에 여러 태스크가 동시에 병렬적으로 실행된다.


동기 (Synchronous)

  • 요청과 결과가 한 자리에 동시에 나타나는 것으로 사용자가 서버로 요청을 보냈을 경우 요청에 대한 응답을 리턴받기 전까지는 다른 것을 하지 못하고 기다려야 한다.
  • 특정 프로그램을 구동시키는 데 시간이 5분 소요된다고 하면, 이 프로그램이 구동되는 5분동안 컴퓨터는 다른 프로그램을 동작시키지 못하고, 구동되기를 기다려야 한다.
  • 장점 :  설계가 간단하고, 직관적이다.
  • 단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 한다.

동기 방식 예시

https://private.tistory.com/24

1. A의 계좌는 10,000원을 뺄 생각을 하고 있다.

2. A의 계좌가 B의 계좌에 10,000원을 송금한다.

3. B의 계좌는 10,000원을 받았다는 걸 인지하고, A의 계좌에 10,000원을 받았다고 전송한다.

4. A, B 계좌 각 각 차감과 증가가 동시에 발생하였다.

 

A의 계좌와 B의 계좌는 서로 요청과 응답(1~3과정)을 확인한 후 같은 일을 동시에 진행하였다. (4번 과정) '계좌이체'같은 작업은 동기방식으로 처리해야 A에서 보냈는데 B는 못받는 상황이 없을 것이다.

 

반대로 비동기방식은 위의 예제처럼 노드사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.


비동기(Asynchronous)

  • 요청한 곳에 결과가 나타나지 않으며, 사용자가 서버로 요청을 보냈을 경우 요청에 대한 응답을 기다리지 않고, 다른 것을 수행할 수 있으며 서버로 다른 요청을 보낼 수도 있다.
  • 특정 프로그램을 구동시키는 데 시간이 5분 소요되어도 그 시간동안 다른 프로그램을 수행할 수 있다. 
  • 장점 : 요청에 대한 결과가 반환되기 전에 다른 작업을 수행할 수 있어서 자원을 효율적으로 사용할 수있다.
  • 단점 : 동기 방식보다 설계가 복잡하고, 논증적이다.

비동기 방식 예시

https://private.tistory.com/24

1. 학생은 시험문제를 푼다

2. 시험문제를 모두 푼 학생은 선생님에게 전송한다.

3. 선생은 학생의 시험지를 채점한다.

4. 채점이 다 된 시험지를 학생에게 전송한다.

5. 학생은 선생이 전송한 시험지를 받아 결과를 확인한다.

 

학생과 선생은 시험지라는 연결고리가 있지만 시험지에 행하는 행위(목적)은 서로 다르다. 학생은 시험지를 푸는 역할을 하고 선생은 시험지를 채점하는 역할을 하였다. 서로의 행위(목적)가 다르기때문에 둘의 작업 처리 시간은 일치하지 않고, 일치하지 않아도 된다.

 


동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이다.

동기는 추구하는 같은 행위(목적)가 동시에 이루어지며, 비동기는 추구하는 행위(목적)가 다를 수도 있고, 동시에 이루어지지도 않는다.

 

비동기 방식에 대해 찾아보면 블록과 논블록의 개념도 많이 언급된다. 어떤 블로그에서 너무 잘 설명해둔 것이 있어서 가져왔다.

 

블록과 논블록의 차이를 간략하게 예제를 통해서 보면, 학생이 시험지를 선생에게 건넨 후 가만히 앉아 채점이 끝나서 시험지를 돌려받기만을 기다린다면 학생은 블록 상태이다. 하지만 학생이 시험지를 건넨 후 선생에게 채점이 완료되었다는 전송을 받기 전까지 다른 과목을 공부한다거나 게임을 한다거나 다른 일을 하게 되면 학생의 상태는 논블록 상태라고 한다.

 

 

 

 

 

Reference Link

https://private.tistory.com/24

https://dev-coco.tistory.com/46

https://ynzu-dev.tistory.com/105

https://velog.io/@khy226/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0%EB%9E%80-Promise-asyncawait-%EA%B0%9C%EB%85%90

 

 

 

728x90