동기/비동기
: 프로세스의 수행 순서 보장에 대한 매커니즘블록킹/논블록킹
: 프로세스의 유휴 상태에 대한 개념이다.
비슷해 보이지만 이 두 개념은 완전히 다른 것이다.
호출되는 함수의
작업 완료 여부를 기다리는지에 따라
, 함수 실행/리턴 순차적인 흐름을 따르는지에 초점이 맞춰져있다.
호출하는 함수 A
가 호출되는 함수 B
의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인하는 것이다.
호출하는 함수 A가 호출되는 함수 B를 호출할 때 callback 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.
함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.
처리되어야 하는 작업이, 전체적인
작업 흐름을 막느냐 안막느냐
에 초점이 맞춰져있다. 즉, 제어권이 누구한테 있느냐가 관심사이다.
호출하는 함수 A가 호출되는 함수 B를 호출하면, 제어권을 B에게 넘겨준다.
제어권을 넘겨받은 B가 함수를 실행할 동안, A는 제어권이 없기 때문에 함수 실행을 멈춘다. B 함수의 실행이 끝나야 A 함수가 재개된다.
A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
따라서 B 함수를 호출하고도 계속 A 함수를 실행할 수 있다.
동기/비동기와 블로킹/논블로킹은 다른 개념이기 때문에
조합되어 사용되는 경우를 볼 수 있다.
동기 + 블로킹
이라고 볼 수 있다.비동기 + 논블로킹
이다. 서버에 API 요청을 보내고, 응답을 기다리지 않고 다음 일을 수행할 수 있다.참고 자료
https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/