블로킹 vs 논블로킹, 동기 vs 비동기

Ilhwanee·2022년 10월 2일
0

CS

목록 보기
26/27

블로킹 vs 논블로킹

블로킹과 논블로킹의 차이는 제어권에서 온다.

A함수가 B함수를 호출할 때 B함수가 제어권을 가지고 실행이 끝난뒤 A함수에게 제어권을 돌려주고 A함수가 계속하여 실행하는 것을 블로킹이라 한다.

A함수가 B함수를 호출할 때 A함수가 그대로 제어권을 가지고 실행을 이어나가는 것을 논블로킹이라 한다.



동기 vs 비동기

동기와 비동기의 차이는 동시에 일어나는지 여부이다.

요청과 결과가 한 자리에서 동시에 일어나는 것이 동기이다. 예를들어 메일 발송 API를 만들어 요청이 들어왔을 때 비즈니스 로직을 수행하여 반환까지 동시에 진행된다면, 이 것은 동기이다.

만약 메일 발송 서버와 요청을 받는 서버를 따로 두고, 메세지큐를 이용한다면 비동기를 구현할 수 있을 것이다. 요청 받는 서버는 요청을 받고 메세지큐에 담기만하고 다른 작업을 수행하고 발송 서버는 메세지큐에서 꺼내어 발송하면 두 행위는 동시에 이루어지지 않는다.

비동기는 완료 여부를 기다리지 않고 수행을 이어나갈 수 있지만 구현이 복잡하다.



조합

다음과 같은 조합이 가능하다.

  • 동기-블로킹
    • 작업 중 호출 시 기다린다. 작업이 완료되면 이어서 수행한다.
  • 비동기-블로킹
    • 작업 중 호출 시 기다릴 필요가 없지만 기다린다. 작업이 완료되면 이어서 수행한다.
  • 동기-논블로킹
    • 작업 중 호출 시 작업을 이어나간다. 계속해서 작업 완료를 감시한다.
  • 비동기-논블로킹
    • 작업 중 호출 시 작업을 이어나간다. 작업이 완료되면 이어서 수행한다.


profile
블로그 이전 -> https://pppp0722.github.io

0개의 댓글