블로킹과 논블로킹은 기본적으로 I/O를 다루는 기술을 의미한다.
함수의 결과값을 받아 올때까지 다른 일을 수행하지 않고 기다린다. 예를 통해 조금더 자세히 알아보자.
현재 실행하고있는 호출자 함수가 제어권을 가지고 있다.
호출자 함수를 실행하던중, functionA() 함수를 만난다. 이 경우 제어권을 호출자에서 functionA 에게로 넘긴다.
제어권을 가지고 있는 함수는 응답 데이터가 존재할 때까지 제어권을 가지고 있다가 결과 값과 함께 제어권을 반환한다.
이와 같은 상황에서 호출자는 호출된 함수의 결과값을 받을 때까지 아무런 작업을 하지 못하는 상태가 된다. 이 경우가 바로 Blocking 상태이다.
함수의 결과값를 받지 않아도 제어권과 결과 값을 반환한다. (결과값은 데이터 뿐만 아니라, '결과값이 없음'도 결과값이 될 수 있다.) 예를 통해 조금더 자세히 알아보자.
호출 하는 함수는 마찬가지로 제어권을 가지고 있다가 호출된 함수에게 제어권을 넘긴다.
Blocking과 다른 점은 여기서 발생한다.
제어권을 받은 함수는 응답데이터가 존재하지 않은 경우에도 바로 return한다. 동시에 제어권도 넘겨준다.
Synchoronous / Non-Blocking의 경우 무한루프를 통해 응답데이터가 존재하는지 지속적으로 확인한다.
Asynchoronous / Non-Blocking의 경우 제어권을 반환한 함수의 결과값에 대해 신경쓰지 않는다.
https://www.youtube.com/watch?v=IdpkfygWIMk&t=693s&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech