cf) runtime : 특정언어로 만든 프로그램들을 실행할 수 잇는 환경. 노드는 자바스크립트 프로그램을 컴퓨터에서실행할 수 있게 해줌.
cf) runtime environmnet : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태
런타임은 자바스크립트를 웹브라우저 바깥에서 동작할 수 있게 해주는 프로그램이라고 생각해도 무방하다.
원래 자바스크립트는 웹브라우저 안에서 돌아가는 언어였으나 노드의 등장으로 웹브라우저 바깥에서도 동작할 수 있게 되었다.
자바스크립트 라는 언어를 사용하여 컴퓨터를 직접적으로 제어(웹 브라우저와 서버 둘다 하나의 언어로 제어 가능)
싱글스레드(자바스크립트의 특징)
이벤트 기반, Non blocking I/O Model 사용 -> 가볍고 효율적임.
cf) Non blocking : 이전 작업이 완료될 때까지 멈추지않고 다음 작업을 수행함을 뜻함.
v8이라는 엔진을 탑재
이벤트 루프라는 방식을 통해 서버 쪽에서도 비동기 프로그래밍을 할 수 있다는 장점이 있음.
: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.
이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백함수를 호출. 발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 노드는 다음 이벤트가 발생할 때까지 대기한다.
※ 이벤트 루프는 호출 스택이 비어있을 때만 태스크 큐에 있는 함수를 호출 스택으로 가져온다.
cf) 자바스크립트와 노드에서 논블로킹이 중요한 이유는 싱글스레드이기 때문이다. 한 번에 한 가지 일 밖에 처리하지 못하므로 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리할 수 없다.
[프로세스]
운영체제에서 할당하는 작업의 단위. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
[스레드]
프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 여러개의 스레드를 가질 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다(== 같은 메모리에 접근할 수 있다.)
-> 스레드는 작업을 처리하는 일손으로 생각하면 됨.