본문 바로가기
Study/JavaScript

[JavaScript] 자바스크립트 동기와 비동기, 블로킹과 논블로킹

by 김만두_ 2022. 11. 28.

동기와 비동기, 블록킹과 논블록킹은 완전한 별개의 개념이다.

 

동기와 비동기 : 프로세스의 수행 순서 보장에 대한 매커니즘

블록킹과 논블록킹 : 프로세스의 유휴 상태에 대한 개념

 

동기와 비동기

처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점

동기 (Synchronous)

호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인하며 신경을 쓴다.

(* 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것)

비동기 (Asynchronous)

함수 A 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다. 

 


블로킹과 논블로킹

처리되어야 하는 (하나의) 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점

블록킹 (Blocking)

A 함수 B 함수 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다.

  1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
  2. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
  3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.

논블록킹 (Non-Blocking)

A 함수 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.

  1. A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
  2. A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.

 

 

엄청나게 잘 정리된 사이트 : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#%EB%8F%99%EA%B8%B0_&_%EB%B9%84%EB%8F%99%EA%B8%B0_vs_%EB%B8%94%EB%A1%9C%ED%82%B9_&_%EB%85%BC%EB%B8%94%EB%A1%9D%ED%82%B9_%EA%B0%9C%EB%85%90