자바스크립트는 싱글 스레드만 사용한다.
스레드(운영 체제에서의 프로세스)
하나의 스레드로 여러 요청을 어떻게 다룰 수 있을까?
node 백그라운드는 어떤 요청을 어떻게 처리하고 있는지 알아보자!
Node.js가 시작하면 프로그램에 의해 자동으로 시작됨
이벤트 콜백을 다룬다.
특정 이벤트가 일어났을 때 바로 이벤트 루프가 해당 코드를 실행하는 것!
모든 콜백을 파악하고 있어서 코드를 실행함.
금방 처리할 수 있는 코드를 포함한 콜백만 다룸
시간이 오래걸리는 파일 연산에는 도움이 되지 않음.
Node.js가 시작하면 프로그램에 의해 자동으로 시작됨
시간이 오래걸리는 파일 연산을 처리.
JavaScript 코드로부터 완전히 분리되어 다른 여러 스레드에서 작동할 수 있음.
앱을 실행하는 운영 체제와 깊은 연관이 있다.
-> 코드로부터 완전히 분리되었기 때문에 무거운 작업을 모두 처리할 수 있는 것!
WorkerPool 덕분에 node.js가 성능을 유지할 수 있다.
setTimeout , setInterval 메서드를 사용해
새로운 반복이 시작될 때마다 실행해야 하는 타이머 콜백이 있는지 확인한다.
타이머가 끝나면 실행할 함수를 node.js가 알고 있어서
항상 새로운 루프 반복이 일어날 때마다 시간이 다 된 콜백을 실행함
읽기 및 쓰기 파일의 연산이 끝나서(오래걸리는 블로킹 연산) 들어온 콜백을 실행
만약 처리되지 않은 콜백이 너무 많이 있다면 루프 반복을 이어가면서 남은 콜백을 다음 반복에서 실행하도록 미룬다.
Node.js가 새로운 I/O 이벤트를 찾아 최대한 해당 이벤트의 콜백을 빨리 실행하도록 함.
타이머가 다 되어 실행해야하는 콜백도 확인
setImmediate 콜백 실행
setTimeout setInterval처럼 바로 실행되기는 하지만 반드시 열린 콜백이 모두 실행된 다음에 실행됨!
닫힌 이벤트 콜백이 모두 실행
refs == 0
Node.js 코드는 논블로킹 방식으로 실행됨
콜백, 이벤트 기반 방식
수많은 콜백과 이벤트를 등록해두면 특정 작업이 끝난 후에 Node.js가 해당 코드를 작동시킨다
코드가 바로 실행되서 메인 스레드를 막지 않도록 등록해 나중에 실행되게함.
Javascript 스레드는 항상 새 이벤트나 새로 들어오는 요청 등을 다룰 수 있게 됨.
더 이상 작업이 없을 때는 프로그램이 종료되는데 서버는 종료될 일이 없다!
createServe가 절대 끝나지 않는 이벤트에 대한 이벤트 리스너를 등록하기 때문
새로운 이벤트(요청)가 발생해도 이벤트 리스너의 등록을 취소하지 않음.
서버는 계속해서 들어오는 요청을 들어야함.
udemy - Maximilian Schwarzmüller