본문 바로가기
nodejs

nodejs 교과서 챕터0 - nodejs란 무엇인가? 호출스택과 이벤트루프

by 오늘의코더 2024. 6. 10.
반응형

nodejs는 무엇인가?

v8엔진으로 돌아가는 런타임: 자바스크립트 실행기

자바는? jdk엔진 jrd런타임

원래 브라우저에서만 돌아갈 수 있었는데 nodejs가 만들어져서 JS를 다른 곳에서도 실행할 수 있게 되었다.

 

엔진내부 -> c, c++

libuv: 싱글스레드 비동기

 

이벤트기반

모든 프로그래밍 언어는 이벤트가 필수적임.

이벤트리스너, 콜백함수를 짜야 한다.

 

node는 비동기가 어렵다.

블로킹: 한번에 하나씩 실행 - 실행컨텍스트

논블로킹: 여러개 동시에 실행 - 이벤트루프

 

프로세스안에 여러 스레드로 구성되어 있다.

노드는 엄밀히 말하면 멀티스레드인데 그중 한개씩만 컨트롤이 가능하다.

스레드 하나를 코어 한개가 돌린다.

노드는 주문받아놓고 완료되면 완료된 것 먼저 한개씩 주는 방식이다.

 

서버와 클라이언트

서버: 정보, 데이터를 준다.

클라이언트: 요청을 보낸다.

 

노드서버의 장단점

싱글스레드라서 컴퓨터 자원을 적게쓴다.

input/output에 좋다. I/O

js를 씀-커뮤니티큼-기술안정

json과 호환성이 좋다.

성능은 중간이다. rust go c++ c등 성능좋은 언어들이 있다.

 

리액트,네이티브,일렉트론등 많은 시중의 제품이 노드로 만들어졌다.

 

npm i -g npm(npm 업글)

 

호출스택

프링글스처럼 쌓인다. 맨밑에 anonymous가 실행되고 그위에서 함수가 호출된 순서대로 쌓이고 더이상 쌓이는 것이 없게되면 맨 위에거부터 실행된다.

비동기코드의 작동원리는 호출스택으로는 설명이 불가하다.

 

이벤트루프

호출스택/백그라운드/태스크큐/메모리/콘솔창

 

비동기함수는 백그라운드로 보냄

호출스택이 비어있을때 태스크큐의 함수를 끌어와서 실행

 

백그라운드는 다른스레드가 실행한다(c기반)

 

JS에서

settimeout

setinterval

네트워크

암호화

압축모듈

만 비동기가 가능하다.

나가면서 백그라운드로 타이머(run,5000)을 보내줌

5초후 태스크큐로 run함수보냄

호출스택이 비었을때 태스크큐에서 호출스택으로 함수보냄

promise 

then/catch

process.nextTick

-> 태스크큐에서 새치기를 한다.

 

백그라운드,태스크큐: C++,운영체제가 컨트롤한다.

반응형

댓글