노드의 특징
1. 이벤트 기반
이벤트의 예: 클릭, 네트워크 요청, 타이머 등
이벤트 리스터: 이벤트를 등록하는 함수
콜백 함수: 이벤트가 발생했을 때 실행될 함수
2. 논블로킹 I/O(입력(Input)/출력(Output))
논블로킹: 오래 걸리는 함수를 백그라운드로 보내서 다음코드가 먼저 실행되게 하고, 나중에 오래걸리는 함수를 실행
-논블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
-일부코드 : I/O작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
-나머지 코드는 블로킹 방식으로 실행됨
-따라서 I/O작업이 많을때 노드의 활용성이 극대화
- A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
- A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.
논블로킹은 A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
- A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
- A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.
블로킹은 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다.
- A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
- 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
- B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.
3. 프로세스와 스레드
프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원공유 X
스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글스레드라고 표현함
노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
4. 싱글 스레드
싱글 스레드라 주어진 일을 하나밖에 처리 못함
-블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 -> 비효율 발생
주방에 비유(점원: 스레드, 주문: 요청, 서빙: 응답)
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행가능(따라서 노드는 멀티 프로세스 활용)
-요청을 먼저 받고, 완료가 될 때 응답함
-I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐
노드에서 멀티스레드를 사용안하는 이유:
- 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
- 이때 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
- 멀티 스레드의 경우 프로그래밍 난이도가 어려움
- 스레드 수많은 자원을 많이 사용함
- 싱글 스레드 모델은 프로그래밍 난이도가 쉽고, CPU, 메모리 자원 적게 사용
서버로서의 노드
장점 단점
'Node' 카테고리의 다른 글
for await(변수 of 프로미스 배열) (0) | 2024.01.24 |
---|---|
async function (0) | 2024.01.24 |
프로미스 (0) | 2024.01.24 |
클래스 (0) | 2024.01.24 |
구조분해 할당 (1) | 2024.01.24 |