프로그램 : 지시 사항들이 나열된 순서
컴퓨터 프로그램 : 특정 작업(specific task)을 수행하는 일련의 명령어들의 모음(집합체)
프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
위키백과에서 찾을 수 있는 단어들의 정의입니다. 컴퓨터에서 프로그램이라고 하는건 특정한 목적을 위해 작업을 수행할 수 있는 일련의 명령어들, 쉽게 말해서 어떤 목적을 가지고 작성된 여러 줄로 이루어진 코드인 셈이죠. 프로그램이 실제로 실행되면 프로세스가 된다고 이해할 수 있습니다.
조금 더 풀어서 정리해보겠습니다. 컴퓨터는 CPU 와 RAM 의 상호작용으로 연산을 처리하는데요. CPU 는 RAM 에 저장된 데이터를 가지고 연산하기 때문에 어떤 프로그램이 실제로 실행되기 위해서는 우선 운영체제로부터 실행에 필요한 RAM 의 자원 일부를 할당받아야 합니다. 그래야 CPU 와의 상호작용으로 빠르게 코드를 처리할 수 있게 되죠.
이렇게 자원 일부를 할당받아 프로그램이 동작하는 상태가 된 것을 프로세스라고 합니다. 하나의 프로그램을 여러 개 실행할 경우 다중 프로세스가 되는 것이죠. 맥북에서는 활성 상태 보기
에서 현재 작업 중인 프로세스의 목록을 확인할 수 있습니다.
프로그램이 실행된 것이 프로세스라면, 스레드는 프로세스 안에서 진행되고 있는 흐름의 단위라고 합니다.
저는 자바스크립트를 집중해서 공부를 하는 중인만큼 다른 언어에 대해서는 잘 알지 못하는데요. 최소한 이제까지 공부한 내용에서 만큼은 자바스크립트는 싱글 스레드로 동작하는 것 같습니다. 스택오버플로우의 답변 에서 멀티 스레드로 동작하는 일부의 경우는 무시해도 좋을 정도라고 하는 것으로 보아서는, 거의 대부분에 경우에 싱글 스레드로 동작한다고 이해할 수 있는 것 같네요.
비동기를 공부하면서 레스토랑과 웨이터의 비유를 든 적이 있는데요. 이 비유를 가져와 프로세스를 이해하는 데 사용해보자면 레스토랑을 하나의 프로세스
로, 웨이터를 하나의 스레드
로 볼 수 있지 않을까 합니다. 싱글 스레드란 하나의 레스토랑(프로세스
)이 한 명의 웨이터(스레드
)를 통해 굴러가는 것이죠.
손님들(프로그램 내부의 코드들
)이 순서에 따라 주문하기 위해 기다린다고 할 때, 한 명의 웨이터(싱글 스레드
)는 손님을 순서대로 처리하게 됩니다. 만약 웨이터가 여러 명이라면 웨이터의 숫자 만큼 손님들의 주문을 동시에 처리할 수 있겠죠. 이 경우를 멀티 스레드
라고 할 수 있을 것 같습니다.
사실 프로세스와 스레드에 대해 블로깅을 하면서 원래 하려고 했던 것은 멀티 프로세스와 멀티 스레드를 조금 더 공부하고 이해해서 풀어내는 것이었는데요. 여전히 제 말로 풀어내기엔 부족한 것 같아 오늘은 아주 기초적인 이해부터 진행해보았습니다.
그나마도 위의 설명은 지난 몇 일 간의 공부한 것들 중에서, 글로 표현할 수 있는 만큼을 풀어낸 것입니다. 늘 그렇듯 어떤 개념을 알게 된 것과, 그것을 풀어낼 수 있는 것 사이에 간극은 엄청난 법이죠. 누군가는 내가 가진 언어로 풀어내지 못했다면 내 것이 아니라고 평가할지도 모르겠습니다.
오늘 하지 못했던 멀티 프로세스와 멀티 스레드는 언젠가 이해가 깊어지고 난 뒤 다시 블로깅을 해 볼 생각입니다. 그 대신 개념적으로 이해하는 데 도움이 되었던 블로그 글을 하나 링크하도록 하겠습니다. 추가적인 이해에 도움이 되시면 좋겠습니다.