1. 노드 시작하기

박현지·2021년 3월 12일
0

Node.js

목록 보기
1/1
post-thumbnail

- 이벤트 기반이란?

이벤트가 발생했을 때 미리 지정해둔 작업을 수행하는 방식

1. 이벤트 리스너에 콜백 함수 등록

2. 이벤트 발생 (시스템 -> 이벤트 리스너)

3. 등록된 콜백 함수 호출 (이벤트 리스너 -> 시스템)

예시)

출력 결과:

시작

3초 후 실행

setTimeout : 특정 밀리초이후에 코드를 실행

  • 이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할, 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복

  • 태스크 큐 : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간,

  • 백그라운드 : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳

run 함수 이동경로

  1. 호출 스택에 쌓인다.
  2. setTimeout 실행 시 콜백 run은 백그라운드로 이동한다.
  3. 백그라운드에서 3초 후 태스크 큐로 보낸다.
  4. 호출 스택 실행이 끝나 비워지면 이벤트 루프가 태스크 큐의 콜백(run)을 호출 스택으로 올린다.
  5. 호출 스택에서 비워진다.
  6. 이벤트 루프는 태스크 큐에 콜백이 들어올 때까지 대기한다.

논블로킹 I/O

논블로킹 : 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함

I/O : Input / Ouput

출력 결과:

시작
작업 끝
다음 작업

longTasking 함수가 종료되기 전까지 console.log("다음 작업")이 호출되지 않는다.

출력 결과:

시작
다음 작업
작업 끝

setTimeout(콜백, 0) : 코드를 논블로킹으로 만들기 위해 사용되는 기법 중 하나

밀리초를 0으로 설정했지만 노드에서는 기본적인 지연 시간이 있으므로 바로 실행되지 않는다.

- 싱글스레드

하나의 프로세스에서 하나의 스레드 실행

  • 싱글 스레드, 블로킹 모델

점원 한명이 주문을 받아 주방에 넘기고, 주방에서 요리가 나오면 손님에게 서빙을 한다. 그 후 다음 손님의 주문을 받는다.

  • 싱글 스레드, 논블로킹 모델

    노드가 채택하고 있는 방식

점원이 한 손님의 주문을 받고, 주방에 주문 내역을 넘긴 뒤 다음 손님의 주문을 받는다. 그 후 주방에서 요리가 완료되면 완료된 순서대로 손님에게 서빙한다.

*프로세스와 스레드의 차이

프로세스 : 운영체제에서 할당하는 작업의 단위

  • 노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스
  • 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.

스레드 : 프로세스 내에서 실행되는 흐름의 단위

  • 하나의 프로세스는 스레드를 여러 개 가질 수 있다.
  • 스레드들은 부모 프로세스의 자원을 공유한다. (같은 메모리에 접근 가능)

노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식

*멀티스레드와 멀티 프로세싱의 차이

멀티 스레드 : 하나의 프로세스가 여러 개의 작업을 각각 스레드를 이용하여 동시에 작동시킬 수 있다.

멀티 프로세싱 : 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 한다.

profile
꾸준히 기록하는 딩딩의 개발일지

0개의 댓글