[Node.js] 동기와 비동기, 블로킹과 논블로킹
Node.js

[Node.js] 동기와 비동기, 블로킹과 논블로킹

반응형

블로킹과 논블로킹의 차이

제어권을 콜백함수에 넘겨주느냐 마느냐의 차이입니다.

 

  • A함수가 B함수를 호출 시
블로킹

경우 콜백함수를 실행 할 때 B함수에 제어권을 넘깁니다.

따라서 A함수는 제어권이 없기 때문에 잠시 실행을 멈추게 됩니다.

논블로킹

A함수가 B함수를 호출해도 제어권은 A함수가 그대로 가지고 있습니다.

따라서 A함수는 B함수를 호출한 이후에도 그대로 실행됩니다.

 


동기와 비동기의 차이

호출되는 함수의 결과값을 신경쓰냐 마냐의 차이

동기

A함수가 B함수를 호출하고 리턴값을 계속 신경쓰는 방식입니다.

 

비동기

A함수가 B함수를 호출할 때 콜백함수를 함께 전달해서 함수 B의 작업이 완료되면 함께보낸 콜백함수를 실행하는 방식입니다.

 


 

이제 이 둘을 섞어서 비교해보자

동기를 블로킹처럼 실행(Sync-Blocking)

블로킹처럼 A함수가 B함수를 호출할 때 제어권을 넘겨줍니다.

또 A함수는 B함수의 리턴값을 필요로하기에 A함수는 리턴값을 받아오며 다시 제어권을 가져옵니다.

 


동기를 논블로킹처럼 실행(Sync-NonBlocking)

A함수는 계속 제어권을 가지고있는 상태에서 B함수를 호출합니다.

A함수와 B함수는 동시에 진행되면서 A함수는 B함수의 리턴값을 계속해서 확인합니다.

(중간중간 B함수에게 실행을 완료했는지 물어봅니다.)


비동기를 논블로킹처럼 실행(Async-NonBlocking)

A함수는 B함수를 호출하며 제어권은 그대로 가지고있습니다.

 

그리고 B함수를 호출할 때 콜백함수를 함께 줍니다. B함수는 자신의 작업이 끝나면 콜백함수를 실행합니다.(비동기)


비동기를 블로킹처럼 실행(Async-Blocking)

사실 이 경우를 마주하기가 쉽지 않습니다.

A함수는 B함수의 리턴값을 신경쓰지 않고, 콜백함수를 보냅니다.(비동기)

그런데 A함수는 B함수에 신경쓰지 않음에도 제어권을 B함수에게 넘깁니다. (Blocking)

 

따라서 A함수는 자신과 상관없는 B함수의 작업이 끝날 때 까지 기다려야 합니다.

 

Async-Blocking 의 경우 Sync-Blocking과 차이가 크게 없기 때문에 사용하는 경우가 거의 없습니다.

 

 

https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

 

블로킹 Vs. 논블로킹, 동기 Vs. 비동기

와 드디어 이해했다 속이 후련~

velog.io

 

 

반응형

'Node.js' 카테고리의 다른 글

[NodeJS] require() 함수 동작원리  (0) 2022.04.13
[NodeJS] 템플릿엔진  (0) 2022.04.10
[Sequelize] TypeError: require(...) is not a function  (0) 2022.01.10
[Node.js] Stream이란??  (0) 2021.08.12