동기/비동기 와 블록/논블록

2021. 10. 4. 14:30벡엔드 개발 공부/NodeJS

처음 이 단어들을 접했을 때 이게 대체 뭔소리인가 싶었다. 

책으로 자바스크립트 부터 공부중인데.. 와 이게 진심 무슨 소리지 난 진짜 기초가 부족하구나.. 싶었다. 

그치만 다른 영상들과 블로그들을 보면서 차츰 이해가 가기 시작해 또 까먹고 다시 찾기 싫어 정리해본다.

 

블록킹(blocking)과 논블록킹(non-blocking)

-한 함수에서 다른 함수를 호출했을때 제어권이 다른 함수로 넘어가게 되는데 만약 그 함수에서 모든 일을 마친 후에 제어권을 반환하면 blocking 이라고 할 수 있다.

- 반면, non-blocking의 경우 함수 호출시 제어권을 넘겨준 후 바로 다시 제어권을 반환한다. (할 일이 끝나기전)

 

동기 (Synchronouse)와 비동기(Asynchronouse)

우선 blocking, non-blocking개념과는 다르게 추상적이다.

함수A와 함수 B가 있다고 치면 함수 A의 시작과 함수 B의 끝을 맞춰주면(순차적)이면 동기 라고 할 수 있다.

반면, 비동기의 경우 A함수와 B함수는 순차적이지 않다. 여기서 예외의 경우는 함수 A와B 사이에 인과관계가 존재해야한다. 

 

 

블로킹과 동기의 차이점

읽다보면 문득 둘의 차이가 모호하다고 느낄 수 있다.

우선 블로킹과는 다르게 동기 개념은 추상적이다.

그리고 또 다른점은 블로킹은 제어권에 관한 얘기이면 동기는 제어권을 반환하는 시간에 관한 얘기이다.

 

나만의 예제

내가 햄버거 요리를 맛있게 하려하는데 재료가 없어서 동생한테 사오라고 시켰을때의 예시이다.

 

블럭/동기

이 경우에는 동생이 사온 재료가 올때까지 과정을 지켜보며 나는 다른작업을 하지 않고 기다려야한다.

 

블럭/비동기

동생이 어디쯤인지 궁금하지는 않지만 다른 것을 하지 않고 기다린다.

 

논블럭/동기

동생한테 반복적으로 전화를 해 다와가는지 확인한다. 

 

논블럭/비동기

이 경우에는 동생이 올 동안 우리는 다른 재료들로 다른 요리를 하면서 기다린다.

 

 

 

 

 

'벡엔드 개발 공부 > NodeJS' 카테고리의 다른 글

[Node] Buffer와 Stream  (0) 2021.10.09
Node.js 동작원리  (0) 2021.10.08