(1) 서버, 노드
런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
(2) 이벤트 기반(event-driven)
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식 (ex. 이벤트 리스너에 콜백 함수 등록)
function run() {
console.log(‘5초 후 실행’);
}
console.log(‘시작’);
setTimeout(run, 5000); // 5초 후에 run 실행
console.log(‘끝’);
시작
끝
5초 후 실행
호출 스택에는 실행되는 모든 함수가 호출 스택에 담긴다. 그림 속 anonymous는 자바스크립트 코드가 시작될 때 들어갔다가 코드를 다 실행시키고 나면 스택에서 빠져나간다. 일단 호출 스택이기 때문에 FILO이고 새로운 함수가 위로 쌓인다.
console.log()와 같은 함수는 로그를 찍고 바로 빠져나가고, setTimeOut()과 같은 콜백 함수가 있는 함수들은 스택에 잠시 담겼다가 백그라운드로 콜백 함수와 타이머를 보내고 스택에서 빠져나간다.
백그라운드로 이동한 타이머와 콜백함수는 타이머의 일정 시간이 흐르고 나면 콜백 함수만 태스크 큐로 이동한다.
run() 함수는 대기하고 있다가 호출 스택이 완전히 비면(anonymous까지 빠져나가면) 호출 스택으로 이동해 실행된다.
(3) 논 블로킹 I/O
setTimeOut()을 이용한 논 블로킹 작업(setImmediate())
function Func1() {
//오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
Func1();
console.log('다음 작업');
시작
작업 끝
다음 작업
특별할 것 없이 절차적으로 실행되는 함수다. Func1()이 블로킹 방식의 I/O 작업을 수행한다고 가정했을 때 작업이 끝나기 전까지는 마지막 줄인 console.log('다음 작업'); 이 수행되지 않는다.
function Func1() {
//오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
setTimeOut(Func1, 0);
console.log('다음 작업');
시작
다음 작업
작업 끝
실제로 논 블로킹 작업을 수행하기 위해 setTimeOut() 함수를 사용하는 경우는 드물지만 예시로 들어봤다.
setTimeOut()은 호출 스택에서 사라지더라도 콜백 함수가 태스크 큐로 이동해서 순서대로 실행되지 않고 나중에 실행된다.
(4) 싱글 스레드
프로세스 : 운영체제에서 할당하는 작업의 단위. 실행되고 있는 프로그램 하나라고 생각하면 됨. 프로세스끼리 자원 공유 안 함.
스레드 : 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시 처리 가능. 스레드 간 데이터 공유 가능.
실행 시에 프로세스 하나가 생성되고 그 프로세스는 코드에 따라 내부적으로 여러 개의 스레드를 생성할 수 있다. 그러나 노드에서는 직접 제어할 수 있는 스레드는 하나뿐이기 때문에 우리가 흔히 노드를 싱글 스레드라고 부른다.
스레드 풀(Thread Pool) : 노드가 특정 동작을 수행할 때 스스로 멀티 스레드 사용. ex) 암호화, 파일 입출력, 압축
워커 스레드(Worker Thread) : 노드 12 버전부터 멀티 스레드 사용이 가능하다.
멀티 스레딩 | 멀티 프로세싱 |
하나의 프로세스 안에서 여러 개의 스레드 사용 | 여러 개의 프로세스 사용 |
CPU 작업이 많을 때 사용 | I/O 요청이 많을 때 사용 |
(1) 노드의 특징 == 싱글 스레드, 논 블로킹 모델의 특징 그대로!
(2) 노드를 어디에 사용해야 하나?
Corner Node.js
Editor PORO
[Node.js] 5장 패키지 매니저 (0) | 2021.11.08 |
---|---|
[Node.js] 4장 http 모듈로 서버 만들기 (0) | 2021.11.08 |
[Node.js] 3장 기능 알아보기(2) (0) | 2021.10.30 |
[Node.js] 3장 노드 기능 알아보기 (0) | 2021.10.11 |
[Node.js] 2장 알아두어야 할 자바스크립트 (0) | 2021.10.04 |