Q. 제어권을 어떻게 누가 가지고 언제 반환하였나?
Blocking: 자신의 작업을 진행하다가, 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것.
Non-Blocking: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것.
Q. 결과값/제어권을 반환하는 시간, 어떤함수가 끝나고 다음함수가 시작하는 시간이 일치되었는가?
Synchronous: 제어권의 반환과 결과값의 전달의 시작을 맞추거나, 함수A의 끝과 함수 B의 시작을 맞춘다면 동기라고 한다.
서버에서 데이터를 받아오는 작업을 할 때, 만약 동기식으로 작업을 실행한다면 데이터를 받아오는 작업을 기다리고 완료된 후에야 다음 작업이 실행될 것이다. 따라서 전체적인 실행 속도가 느려지게 되는데, 서버에서 가져오는 데이터의 양이 많을수록 느려지게 된다.
Asynchronous: 특정 코드의 연산이 끝나기를 기다리지 않고 그동안 다른 코드를 실행하는 것이다.
장단점
동기 방식은 결과가 나올 때까지 아무것도 못하지만 설계가 간단하고 직관적이라는 장점이 있고,
비동기 방식은 동기 방식보다 복잡하지만 데이터를 받는 시간동안 다른 작업을 할 수 있어 자원을 효율적으로 사용할 수 있다는 장점이 있다. 비동기 방식을 사용할 때 페이지 리로드 시 전체 리소스를 다시 불러오지 않고 필요한 부분만을 불러화 사용할 수 있는 장점이 있다.
Async & Non-Block?
A 함수를 호출한 뒤 제어권을 반환받음과 동시에 '끝나지 않음'이라는 결과값을 전달받는다. 아직 안끝났는데(Non-Block) 반환하였다(동기).
결과가 완료되지 않았으니 계속 다시 물어보게 된다 =>