블로킹과 논블로킹의 차이는 제어권에서 온다.
A함수가 B함수를 호출할 때 B함수가 제어권을 가지고 실행이 끝난뒤 A함수에게 제어권을 돌려주고 A함수가 계속하여 실행하는 것을 블로킹
이라 한다.
A함수가 B함수를 호출할 때 A함수가 그대로 제어권을 가지고 실행을 이어나가는 것을 논블로킹
이라 한다.
동기와 비동기의 차이는 동시에 일어나는지 여부이다.
요청과 결과가 한 자리에서 동시에 일어나는 것이 동기
이다. 예를들어 메일 발송 API를 만들어 요청이 들어왔을 때 비즈니스 로직을 수행하여 반환까지 동시에 진행된다면, 이 것은 동기이다.
만약 메일 발송 서버와 요청을 받는 서버를 따로 두고, 메세지큐를 이용한다면 비동기
를 구현할 수 있을 것이다. 요청 받는 서버는 요청을 받고 메세지큐에 담기만하고 다른 작업을 수행하고 발송 서버는 메세지큐에서 꺼내어 발송하면 두 행위는 동시에 이루어지지 않는다.
비동기는 완료 여부를 기다리지 않고 수행을 이어나갈 수 있지만 구현이 복잡하다.
다음과 같은 조합이 가능하다.