Blocking/Non-blocking

허준·2023년 9월 7일
0

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(차단, 대기) 하냐 안하냐의 유무를 나타내는 프로세스의 실행 방식이다.

블로킹과 논블록킹에서 가장 중요한 단어는 제어권이다.

블록킹은 내 제어권을 넘겨서 다른 함수가 끝난다음에 내 일을 하는 방식이다.
논블록킹은 다른 함수가 진행되는 말든 상관없이 계속 진행하는 방식이다.

블록킹 함수는 다른 함수가 호출되면 내가 멈춰야한다.
논블록킹은 다른 함수가 호출되든 말든, 끝나든 말든 내 일을 계속하는 함수를 의미한다.

참조

profile
개발자를 리스펙하는 개발자

0개의 댓글