1. 이벤트 리스너에 콜백 함수 등록
2. 이벤트 발생 (시스템 -> 이벤트 리스너)
3. 등록된 콜백 함수 호출 (이벤트 리스너 -> 시스템)
예시)
출력 결과:
시작
끝
3초 후 실행
setTimeout : 특정 밀리초이후에 코드를 실행
이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할, 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복
태스크 큐 : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간,
백그라운드 : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳
run 함수 이동경로
출력 결과:
시작
작업 끝
다음 작업
longTasking 함수가 종료되기 전까지 console.log("다음 작업")이 호출되지 않는다.
출력 결과:
시작
다음 작업
작업 끝
setTimeout(콜백, 0) : 코드를 논블로킹으로 만들기 위해 사용되는 기법 중 하나
밀리초를 0으로 설정했지만 노드에서는 기본적인 지연 시간이 있으므로 바로 실행되지 않는다.
점원 한명이 주문을 받아 주방에 넘기고, 주방에서 요리가 나오면 손님에게 서빙을 한다. 그 후 다음 손님의 주문을 받는다.
노드가 채택하고 있는 방식
점원이 한 손님의 주문을 받고, 주방에 주문 내역을 넘긴 뒤 다음 손님의 주문을 받는다. 그 후 주방에서 요리가 완료되면 완료된 순서대로 손님에게 서빙한다.
노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식
멀티 스레드 : 하나의 프로세스가 여러 개의 작업을 각각 스레드를 이용하여 동시에 작동시킬 수 있다.
멀티 프로세싱 : 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 한다.