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++,운영체제가 컨트롤한다.
댓글