Blocking vs Non-Blocking

Blocking vs Non-Blocking 에 대해서 알아봅시다.

면접 단골 질문인 Blocking vs Non-Blocking 에 대해 정리해보았습니다.

Blocking vs Non-Blocking

둘의 차이점의 키-포인트는 제어권 입니다.

함수 A() {
  B();
  // 다음 작업!
}

함수 B() {
  // 열심히 실행!
}

A 함수 내에서 B 함수 실행 시?

⛔️ 블로킹 (Blocking)

A는 B에게 제어권을 넘겨주고, 함수 실행을 잠시 멈춥니다(Block!).
B는 함수를 실행하고 A에게 제어권을 넘겨줍니다.
A는 제어권을 넘겨받고 나서 다음 작업을 이어갑니다.

Javascript에서 alert() 함수로 설명해보겠습니다.

alert('Hi!');
console.log('Bye!');

위의 작업의 결과는 보이는 바와 같이 아래와 같습니다.

# 메시지 알림으로 Hi! 팝업
Bye!

메시지 팝업으로 Hi!를 보여준 후에 Bye!가 콘솔로 출력됩니다.
이는 alert 함수로 제어권이 넘어가서 실행을 완료되기 전까지 Block 됩니다.
메시지 창을 닫고 나서야 제어권이 다시 돌아와 다음 작업을 실행하게 되는 것이죠.

⛩️ 논블로킹 (Non-blocking)

A에서 B를 호출하지만 B가 바로 제어권을 반납하여 A가 제어권을 가지게 됩니다.
A는 B를 호출하고도 계속해서 다음 작업을 실행합니다.

똑같이 Javascript로 예시를 들어보겠습니다.
비동기 함수로 사용되는 setTimeout()로 설명해볼게요.

setTimeout(() => 
  console.log('Hi!'), 0); // 2번째 매개변수: 대기 시간을 0으로 설정!
console.log('Bye!');

위의 작업을 실행하게 되면 어떻게 될까요?
정답은 아래와 같습니다.

Bye!
Hi!

제어권을 바로 반납 받아 (Hi!를 기다리는 것이 아닌) Bye!를 실행하게 되기 때문입니다.
이렇게 제어권을 바로 반납 받아 다른 일을 할 수 있도록 하는것을 논블로킹이라고 합니다.


© 2021. All rights reserved.

Powered by Hydejack v9.1.6