Non-blocking은 Node.js의 3가지의 큰 특징 중 하나입니다.
동기(Sync), 비동기(Async)와 Non-blocking, blocking은 Node에서 혼용되며 비슷한 느낌으로 사용되고 있습니다.
그러나 네 개의 용어가 다른 만큼 의미상에도 차이가 있습니다.
이번 포스팅에서는 위 네 개의 용어를 정리해보고자 합니다.
동기(Sync) & 비동기(Async)
동기(Sync), 비동기(Async)를 관점에 따라 분류하자면 "시간에 맞춰서 실행되는지"에 대한 시간 관점의 차이라고 할 수 있습니다.
동기(Sync)
작업이 여러 개일 경우 순차적(순서)으로 진행하는 것입니다.
즉 스레드에 A작업은 맡기고 나서 A작업이 끝날 때까지 다른 작업을 하지 못하고 A작업이 끝나면 그때 B작업을 하는 것을 의미합니다.
- 동시에 시작하거나
- 동시에 끝나거나
- A가 끝나고 B를 시작
- 작업 A의 종료시간과 작업 B의 시작시간이 같으면 시간적으로 동기적
비동기(Async)
비동기는 동기와 반대로 실행 순서를 지키지 않고 다음 실행으로 진행하는 것입니다.
즉 스레드에 A작업은 맡기고 나서 A작업이 끝날 때까지(결과) 기다리지 않고 다른 B작업을 하는 것을 의미합니다.
Non-blocking & Blocking
Blocking과 Non-blocking을 관점에 따라 분류하자면 "누가 제어권을 갖는지"에 대한 관점의 차이라고 할 수 있습니다.
Blocking
함수 A를 수행하다가 다른 요청(B함수 호출)을 만나게 된다면 그 즉시 제어권을 넘겨줍니다. 그리고 제어권을 뺏기면 다른 작업을 하지 못하고 가로막혀 return 될 때까지 무작정 기다립니다.
즉 블로킹은 제어권이 없어 직접 제어할 수 없는 작업이 끝날 때까지 무작정 기다려야 하는 것을 의미합니다.
Non-blocking
논블로킹은 함수 A를 수행하다가 다른 요청(B함수 호출)을 만나도 제어권을 잃지 않고 본인이 가지고 있습니다.
그렇기 때문에 작업을 실행하고 난 뒤 그 작업이 완료될 때까지 무작정 기다리지 않고 거의 바로 다음 작업을 수행할 수 있습니다.
아래와 같은 그림을 본다면 시간의 흐름에 따라 보다 쉽게 이해하실 수 있습니다.
동기 & 비동기 / 블로킹 & 논블로킹
Blocking & sync
- 함수 A가 함수 B를 호출합니다.
- 함수 A는 제어권을 함수 B에게 넘깁니다.
- 함수 B는 제어권이 있으니 함수를 실행합니다.
- 함수 실행 완료 후 제어권과 리턴값을 함수 A로 다시 넘깁니다.
- 함수 A가 리턴값을 가지고 실행됩니다.
순차적인 실행을 보장하기 때문에 ➡ Sync
함수 A는제어권이 없기 때문에다른 작업을 하지 못하고 함수 A는 멈추기 때문에 ➡ Blocking
Blocking & Async
- 함수 A가 함수 B를 callback 함수와 함께 호출하며 제어권을 넘깁니다.
- 함수 B는 제어권을 가지고 함수 B를 실행합니다.
- 완료 후 callback 함수를 호출하고함수 A에게 제어권을 넘깁니다.
- 함수 A가 다시 실행됩니다.
순차적인 실행을 보장하지않기 때문에➡Async
함수 A는제어권이 없기 때문에다른 작업을 하지 못하고 함수 A는 멈추기 때문에 ➡ Blocking
Non-blocking & Async
- 함수 A가 함수 B를 callback 함수와 함께 호출합니다.
- 함수 B는 즉시 제어권을 다시 함수 A에 넘겨주고 실행합니다.
- 함수 B는 제어권이 있으니 함수를 실행합니다.
- 함수 A는 함수 B가 실행이 되는 동안 다른 일을 수행합니다.
- 함수 B가 완료되고 나서 콜백 함수를 실행합니다.
순차적인 실행을보장하지 않기때문에 ➡ Async
함수 A는 제어권을 잃지 않고 다음 작업을 수행할 수 있기 때문에 ➡ Non-blocking
Non-Blocking & sync
- 함수 A는 함수 B를 호출합니다.
- 함수 A와 함수 B는 실행됩니다.
- 함수 A는 함수 B에게 실행이 끝났냐고 계속 물어봅니다.
- 만약 물어봤을 때 함수 B가 끝났다면 결괏값을 반환합니다.
순차적인 실행을 보장하기 때문에 ➡ Sync
함수 A는 제어권을 잃지 않고 다음 작업을 수행할 수 있기 때문에➡ Non-blocking
✔ Node에서는 동기-블로킹 방식과 비동기-논블로킹 방식이 대부분 사용됩니다.
'Framework > Node.js' 카테고리의 다른 글
[Node.js-Express] 라우터 (Router) 알아보기 (0) | 2024.04.19 |
---|---|
[Node.js] Middleware & 익스프레스 express 프레임워크 알아보기 (0) | 2024.04.17 |
[Node.js] dotenv 알아보기 (0) | 2024.04.07 |
[Node.js] process.env 알아보기 (0) | 2024.04.07 |