Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태
이벤트 기반이다.
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
논블로킹 I/O
오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원공유 없음
스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스와 자원 공유
싱글 스레드
싱글 스레드라 주어진 일을 하나밖에 처리하지 못한다.
대신 논 블로킹 모델을 채택하여 일부 코드( I/O )를 백그라운드(다른 프로세스)에서 실행 가능하다.
멀티 스레드 모델과의 비교
싱글스레드 모델은 에러를 처리하지 못하는 경우에는 멈추게 된다. ( 프로그래밍 난이도가 쉽고, CPU, 메모리 자원을 적게 사용한다. )
멀티스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복한다. ( 단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용이 발생하고 프로그램이 난이도가 어렵다. 그리고 스레드 수 만큼 자원을 많이 사용한다. )