Be lazy, Be crazy

sync vs async? blocking vs non-blocking? 본문

Node.js

sync vs async? blocking vs non-blocking?

LAZY SIA 2021. 12. 10. 18:23
728x90
반응형

📍동기와 비동기

- '호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐'가 관심사

동기(Synchronous)

- 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐? -> 호출한 함수가!

- 호출되는 함수의 작업 완료 여부를 호출하는 함수가 스스로 확인합니다.

비동기(Asynchronous)

- 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐? -> 호출된 함수가!

- 호출된 함수에서 작업을 완료한 후 콜백함수를 실행하게 해 호출되는 함수의 작업 완료 여부를 확인하여 호출하는 함수가 신경쓰지 않게 합니다.

 

📍블로킹과 논블로킹

- '호출되는 함수가 제어권을 바로 리턴하느냐 마느냐', '리턴에 대한 제어권을 누가 가지고 있느냐'가 관심사

블로킹(Blocking)

- 호출되는 함수가 제어권을 바로 리턴하느냐 마느냐? -> 제어권 바로 리턴하지 않음

- 리턴에 대한 제어권을 누가 가지고 있느냐? -> 호출된 함수가 계속!

- 호출된 함수가 자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않고 가지는 방식

논블로킹(Non-blocking)

- 호출되는 함수가 제어권을 바로 리턴하느냐 마느냐? -> 제어권 바로 리턴함

- 리턴에 대한 제어권을 누가 가지고 있느냐? -> 호출된 함수가 호출한 함수에게 바로 넘겨줌!

- 호출된 함수가 바로 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있도록 하는 방식

 

 

 

글로만 보면 헷갈리죠?

 

헷갈릴 수 있는 4가지 개념을

이해하기 쉽게 크로스해서 살펴봅시다!

 

호출한 함수(파란색 화살표)호출된 함수(초록색 화살표)의 역할에 대하여 비교를 해보겠습니다

 

  Blocking (블로킹) Non Blocking (논블로킹)
Synchronous
(동기)
호출한 함수
- 호출된 함수의 작업이 끝나서 제어권이 다시 넘어올 때 까지 대기함 (다른 일 못함) - 블로킹 특징
- 호출된 함수의 작업 완료 여부를 신경씀 - 동기 특징
(아무 일도 안하면서, 완료됐는지만 바라보고있음)

호출된 함수
- 리턴 제어권 계속 가짐 (자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않음) - 블로킹 특징

결론: 호출된 함수가 작업 끝날 때까지 지켜보다가 작업 끝나는거 확인되면 다음 작업하는 호출한 함수
호출한 함수
- 호출된 함수가 제어권을 바로 다시 호출한 함수에게 넘겨줌 (다른 일 할 수 있음)
- 호출된 함수의 작업완료 여부를 신경씀 - 동기 특징
(다른 일하지만, 주기적으로 완료했는지 체크함)

호출된 함수
리턴 제어권 호출한 함수에게 바로 넘겨줌(제어권 넘겨주고 지 할 일 함) - 논블로킹 특징

결론: 호출된 함수에게 제어권을 주면서 일 시키고 바로 제어권 돌려받고 또 다른 함수에게 또 제어권 주며 일 시키고 제어권 돌려받는 걸 반복하는 호출한 함수.
그러면서 호출된 함수가 완료되었는지 주기적으로 체크하는 호출한 함수(미완이면 다음 주기에 또 물어봄). 요청이 끝난 타이밍에 정확히 확인하기는 힘들겠죠?
Asynchronous
(비동기)
호출한 함수
- 호출된 함수의 작업이 끝나서 제어권이 다시 넘어올 때 까지 대기함 (다른 일 못함) - 블로킹 특징
- 호출된 함수의 작업완료 여부를 신경쓰지 않음
(호출된 함수가 콜백함수를 통해 스스로 작업 완료 여부 확인) - 비동기 특징

호출된 함수
- 리턴 제어권 계속 가짐 (자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않음) - 블로킹 특징

결론: 호출된 함수가 작업 끝날 때까지 아무것도 안하다가 호출된 함수가 "저 작업 끝났어용" 하면 다음 작업 하는 호출한 함수
호출한 함수
- 호출된 함수가 제어권을 바로 다시 호출한 함수에게 넘겨줌 (다른 일 할 수 있음)
- 호출된 함수의 작업완료 여부를 신경쓰지 않음
(호출된 함수가 콜백함수를 통해 스스로 작업 완료 여부 확인) - 비동기 특징

호출된 함수
리턴 제어권 호출한 함수에게 바로 넘겨줌(제어권 넘겨주고 지 할 일 함) - 논블로킹 특징

결론: 호출된 함수에게 제어권을 주면서 일 시키고 바로 제어권 돌려받고 또 다른 함수에게 또 제어권 주며 일 시키고 제어권 돌려받는 걸 반복하는 호출한 함수.
호출된 함수는 작업 완료 시 스스로 호출한 함수에게 "저 작업 끝났어용" 보고하기 가능

 

 

Node.js 와 논블로킹에 관한 포스팅

 

[Node.js] Node.js와 Non-blocking

📍Node.js 란? - Node.js를 한마디로 정의하면 '자바스크립트 런타임'이라고 할 수 있습니다. (*런타임 : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머

lazy-crew.tistory.com

 

반응형
Comments