동기 vs 비동기
프로세스의 수행 순서 보장에 대한 매커니즘
두 가지 이상의 작업의 리턴을 확인하고 다음 작업이 이루어지는지, 아닌지로 구분
동기 :
대상의 리턴시간과 결과를 반환하는 시간이 일치하는 경우. A의 종료시간과 B의 시작시간이 같다
동기(synchronous)는 사전적인 의미로 '동시 발생[존재]하는' 라는 의미
비동기 :
리턴 값을 신경쓰지 않고 각각 동작
동기는 끝날 때까지 기다리고, 그 시간에 맞춰서 다른 작업을 수행하는 방식이고,
비동기는 작업을 해달라는 요청만 해놓고 더이상 신경쓰지 않고 있다가, 상대방이 끝나면 끝났다고 말해주는 방식이다.
블로킹 vs 논블로킹
두 가지 이상의 작업의 제어권을 넘기느냐 , 넘기지 않느냐로 구분
요청받은 함수가 제어권을 언제 돌려주는지 가 핵심
블로킹 (block + ing) '홈으로 쇄도하는 주자를 몸으로 막는 것' 또한 블로킹
블로킹:
I/O 작업 등을 요청했을 경우 I/O 작업이 처리되기 전까지 아무 일도 하지 못한다.
논블로킹 :
호출된 함수에서 I/O 작업등을 요청했을 경우 I/O 작업의 처리여부와 관계없이 바로 다음 작업을 할 수 있다. == 먼저 호출된 함수의 제어권이 넘어가지 않는다. 제어권을 넘겨주기는 하지만 바로 돌려받는다. 제어권을 돌려받은 호출자는 다른 작업을 바로 수행 가능하다.
위 그림을 보면 동기vs비동기와 무엇이 다르냐할 수 있는데 시점이냐, 주도권이냐 에 따라 구분한 차이이다.
논블로킹/ 비동기의 공통점은 동시에 다른 작업을 수행한다는 것이다. 혼용하여 사용하나 실제로는 다른 의미.
그렇다면 Node.js는 논블로킹 비동기 방식으로 I/O를 처리한다 의 의미는 무엇일까?
- 논블로킹 : A함수가 실행되면서 (주도권을 가진 채로 == A함수를 계속 실행하고 있는 채로) B함수를 호출한다
B함수에서는 실행하고 콜백함수도 실행한다
- 비동기 : A함수는 B 의 리턴값을 신경쓰지 않고, A와 B 는 연관이 없다
비동기나 논블로킹 방식이 빨라서 좋을 것 같지만 순차적으로 실행이 안 되서 곤란한 경우도 있었던 것 같다.
참고하면 좋은 영상
https://youtu.be/ohz7uHnza6A?si=nUsQnswPXxUaB49F
ref : 하기 외 다수..
'Web > JavaScript' 카테고리의 다른 글
[Node.js] npm 의 대안 yarn berry 시작하기 (0) | 2024.03.06 |
---|---|
[Node.js] npm (Node package manager) : npm에는 왜 package.json 과 package-lock.json이 존재할까? (0) | 2024.03.05 |
[Node.js] 런타임 / V8 /이벤트 기반 아키텍처/ K6 (0) | 2024.02.22 |
[TypeScript] TSError: ⨯ Unable to compile TypeScript: Operator '+' cannot be applied to types 'T' and 'T' (0) | 2023.10.18 |
[Node.js Express] vm node server 요청 오류 502 Bad Gateway (0) | 2023.10.12 |