블로킹/논블로킹

호출자와 피호출자의 제어권과 관련

제어권: 코드의 실행 순서를 제어하는 권리로 제어권을 가진 함수는 코드 실행 후 자신을 호출한 함수로 이동한다.

블로킹 함수

블로킹 함수

논블로킹 함수

논블로킹 함수

블로킹

  1. A함수가 B함수를 호출 (제어권 A → B)
  2. 제어권이 넘어갔기 때문에 A함수는 실행을 중단하고 B함수 실행
  3. B함수 실행이 끝나면 다시 A함수로 제어권 이동

논블로킹

  1. A함수가 B함수 호출(제어권 이동X)
  2. 제어권이 A함수에 있기 때문에 중단하지 않고 코드를 실행

제어권이 없는 함수가 어떻게 실행될 수 있을까?

Untitled

이벤트 루프, 태스크 큐를 사용!

비동기 함수의 콜백함수는 태스크 큐에 푸시되어 기다리다가 콜 스택이 비어있으면 이벤트 루프에 의해 다시 콜 스택에 푸시되어 실행한다.