Blocking VS Non-Blocking

ellyheetov·2021년 1월 27일
1
  • 제어권이라는 것이 있다고 가정하고 설명한다. 여기서 제어권이란 행동할 수 있는 권리라고 생각해보자.

Blocking VS Non-Blocking

블로킹과 논블로킹은 기본적으로 I/O를 다루는 기술을 의미한다.

Blocking

함수의 결과값을 받아 올때까지 다른 일을 수행하지 않고 기다린다. 예를 통해 조금더 자세히 알아보자.

현재 실행하고있는 호출자 함수가 제어권을 가지고 있다.

호출자 함수를 실행하던중, functionA() 함수를 만난다. 이 경우 제어권을 호출자에서 functionA 에게로 넘긴다.

제어권을 가지고 있는 함수는 응답 데이터가 존재할 때까지 제어권을 가지고 있다가 결과 값과 함께 제어권을 반환한다.

이와 같은 상황에서 호출자는 호출된 함수의 결과값을 받을 때까지 아무런 작업을 하지 못하는 상태가 된다. 이 경우가 바로 Blocking 상태이다.

Non-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

profile
 iOS Developer 좋아하는 것만 해도 부족한 시간

0개의 댓글