먼저 동기/비동기는 Blocking/Non-Blocking과 다르다.
Blocking/Non-Blocking는 제어권이 어디에 있느냐에 대한 관점이다. 작업을 시킨 주체에게 제어권이 있는지 혹은 작업을 처리하는 주체에게 제어권이 있는 지에 대한 것이다.
Blocking
(직접 제어할 수 없는 대상의 작업이 끝날 때까지 기다려야 하는 경우)
호출된 함수가 자신의 작업을 모두 끝낼 때까지 제어권을 가지고 있어 호출한 함수가 대기하도록 함
➡️ 작업이 완료된 후 새로운 작업을 수행할 수 있다
Non-Blocking
(직접 제어할 수 없는 대상의 작업이 완료되기 전에 제어권을 넘겨주는 경우)
호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있게 함
➡️ 작업의 완료 여부와 관계없이 새로운 작업을 수행할 수 있다
<aside> 💡 동기/비동기는 시간 관점, Blocking/Non-Blocking은 제어권 관점에서 생각!
</aside>
두 개 이상의 작업들이 서로의 작업 시작/종료 시간을 맞추어 동시에 일어나게 하는 것이다.
따라서 데이터를 주고받는 '순서'가 중요할 때 사용된다. 그리고 요청한 작업만 처리하면 되기 때문에 전체적인 수행 속도는 빠를 수 있다. 하지만 한 작업에 대한 시간이 길어질 경우, 전체 응답이 지연될 수 있다.