Blocking과 Non-blocking 의 차이점에 대하여 알아보자
먼저 Blocking과 Non-blocking 이야기를 할때 꼭 헷갈려하는 개념이 있다.
바로 동기/비동기 개념이다.
동기/비동기 와 블로킹/논블로킹 이 두 개념은 표현 형태는 비슷해 보일지라도, 서로 다른 차원에서 작업의 수행 방식을 설명하는 개념이다.
동기/비동기
동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이다.

동기/비동기는 순차적으로 작업을 순차적으로 시작할지에 대한 개념이다. 동기는 일이 순차적으로 시행된다.
동기함수
console.log(A) console.log(B) console.log(C)결과값
A
B
C
이와같이 첫번째 줄에 있는 함수가 먼저 시행되고, 작업이 끝나면 두번째 함수가 시작되는 방식이다.
비동기 함수
console.log(A) setTimeout(()=>{ console.log(B) },1000) console.log(C)결과값
A
C
B
3번째 줄에 있는 console.log(C)는 2번째줄에 있는 함수의 종료와 상관없이 실행되었다. 우리는 이것을 비동기 함수라고 부른다.
그러면 이것과 Blocking/Non-Blocking과는 어떻게 다른가
블로킹과 논블록킹은 단어에서 알 수 있듯이 다른 요청의 작업을 처리하기 위해 현재 작업을 block(차단, 대기) 하냐 안하냐의 유무를 나타내는 프로세스의 실행 방식이다.
블로킹과 논블록킹에서 가장 중요한 단어는 제어권이다.
블록킹은 내 제어권을 넘겨서 다른 함수가 끝난다음에 내 일을 하는 방식이다.
논블록킹은 다른 함수가 진행되는 말든 상관없이 계속 진행하는 방식이다.
블록킹 함수는 다른 함수가 호출되면 내가 멈춰야한다.
논블록킹은 다른 함수가 호출되든 말든, 끝나든 말든 내 일을 계속하는 함수를 의미한다.
참조