프로세스는 운영체제 위에서 연속적으로 실행되고 있는 프로그램을 말합니다. 운영체제에서 여러 프로세스는 서로 독립적으로 실행되고 있기 때문에, 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않습니다.
프로그램을 실행하기 위한 코드입니다.
코드가 어떤 순서로 실행되어야 하는지, 함수가 끝나면 어디로 다시 돌아가야하는지에 대한 정보를 저장하고 있는 장소입니다.
오브젝트, 데이터를 생성할 때 저장하는 공간입니다. 동적으로 할당된 변수들 저장합니다.
전역 변수나 정적인 변수들 저장합니다.
스레드란 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위라고 할 수 있습니다. 한 프로세스 안에서는 여러 개의 스레드가 동작할 수 있습니다. 하나의 스레드는 해야 할 업무를 배정받습니다. 각 스레드는 저마다 필요한 일을 수행합니다. 스레드는 실행해야 하는 함수의 호출을 기억해야하기 때문에 스택을 가지고 있습니다.
프로세스 안에서 동작하는 스레드들은 하나의 프로그램을 위해서 동작하므로 프로세스에 지정된 코드, 힙, 데이터에 공통적으로 접근해서 공통적으로 업데이트가 가능합니다. 만약 내 프로그램에서 음악을 들으면서 사진을 편집할 수 있는 애플리케이션이 있다면 음악을 재생할 수 있는 스레드, 사진을 편집할 수 있는 스레드가 있는 것입니다. 그래서 스레드는 프로세스 안에서 동시다발적인 일들을 할 수 있게 해줍니다.
스레드에는 스택이 있지만 코드와 힙, 데이터가 없으니 각 스레드는 공통된 코드, 힙, 데이터를 서로 공유하면서 사용합니다.
자바스크립트는?
자바스크립트에서는 싱글 스레드만 지원합니다. 자바스크립트 자체는 멀티스레딩이 안 되지만 자바스크립트가 동작하는 브라우저에서는 멀티 스레딩을 지원합니다. 그래서 Web APIs를 이용하게 되면, 멀티 스레딩이 가능합니다. 또한 자바스크립트 런타임 환경에서도 가능합니다. Node.js에서는 가능하죠. 그리고 런타임 환경에서는 이벤트 루프를 이용해서 다양한 동작을 실행할 수 있습니다.
자바스크립트로 작성한 소스 코드에서 할당된 변수, 상수, 함수는 모두 Memory heap에 저장이 됩니다. 힙에는 요소가 순서대로 정리가 되어있는 게 아니라 여기저기 아무렇게나 저장됩니다.