컴퓨터 관련 개념을 조금만 공부하다 보면 ‘프로세스’와 ‘스레드’라는 단어를 자주 보게 된다. 처음에는 둘 다 그냥 프로그램 실행과 관련된 용어 같아서 크게 구분하지 않고 넘겼다. 나도 초반에는 그냥 “둘 다 비슷한 거 아닌가?”라고 생각했었다. 그런데 조금 더 들여다보니까, 이 둘은 구조 자체가 완전히 다르고, 역할도 꽤 명확하게 나뉘어 있었다.

프로세스는 ‘실행 중인 프로그램’ 그 자체다
프로세스는 간단하게 말하면 실행되고 있는 프로그램 하나를 의미한다. 예를 들어 우리가 크롬을 켜면, 단순히 프로그램이 열리는 게 아니라 하나의 프로세스가 생성된다. 게임을 실행해도, 메모장을 열어도 각각 별도의 프로세스로 동작한다.
여기서 중요한 점은 프로세스는 서로 독립적으로 동작한다는 것이다. 각 프로세스는 자기만의 메모리 공간을 가지고 있고, 다른 프로세스의 영역을 직접 건드릴 수 없다. 이 구조 덕분에 하나의 프로그램이 문제가 생겨도 다른 프로그램에는 영향을 주지 않는다.
나도 이걸 체감한 적이 있는데, 게임이 갑자기 튕겼는데도 다른 프로그램은 멀쩡하게 돌아가던 경험이 있었다. 그때는 그냥 “다행이다” 정도로 생각했는데, 알고 보니 이게 바로 프로세스가 독립적으로 동작하기 때문이었다.
즉, 프로세스는 안정성을 위해 서로 분리된 공간에서 실행되는 구조라고 보면 이해하기 쉽다.
스레드는 하나의 프로세스 안에서 작업을 나누는 단위다
스레드는 프로세스보다 더 작은 개념이다. 하나의 프로세스 안에서 여러 작업을 동시에 처리하기 위해 나뉘는 실행 단위라고 보면 된다.
예를 들어 웹 브라우저를 사용할 때를 생각해보면 이해가 쉽다. 하나의 탭에서 페이지를 로딩하면서, 동시에 다른 탭에서는 영상을 재생하고, 또 다른 작업도 함께 진행된다. 이게 가능한 이유가 바로 스레드 때문이다.
스레드는 같은 프로세스 안에 있기 때문에 메모리를 공유한다. 그래서 데이터 접근 속도가 빠르고, 여러 작업을 효율적으로 처리할 수 있다. 하지만 이 구조 때문에 문제가 하나 있다. 하나의 스레드에서 오류가 발생하면, 같은 프로세스 전체에 영향을 줄 수 있다는 점이다.
나도 예전에 프로그램이 갑자기 전체적으로 멈춘 적이 있었는데, 그때 이유를 찾아보니까 특정 스레드에서 문제가 생기면서 전체가 같이 멈춰버린 경우였다.
그래서 스레드는 효율성은 높지만, 안정성 측면에서는 프로세스보다 약한 구조라고 볼 수 있다.
결국 차이는 ‘독립성’과 ‘효율성’이다
프로세스와 스레드를 이해할 때 가장 중요한 기준은 바로 이 두 가지다. 프로세스는 서로 완전히 분리되어 있어서 안정성이 높고, 스레드는 같은 공간을 공유하기 때문에 효율성이 높다.
정리해보면:
- 프로세스 → 독립적, 안정적, 대신 무거움
- 스레드 → 빠르고 효율적, 대신 서로 영향 가능
이 차이를 이해하고 나니까, 왜 어떤 프로그램은 여러 개로 나뉘어 실행되고, 어떤 프로그램은 내부에서 여러 작업을 동시에 처리하는지 조금은 감이 왔다.
특히 요즘 프로그램들은 대부분 멀티 스레드 구조를 사용하고 있어서, 이 개념을 알고 보면 동작 방식이 훨씬 자연스럽게 이해된다.
한 줄로 정리하면 프로세스는 서로 독립적인 실행 단위이고, 스레드는 하나의 프로세스 안에서 작업을 나눠 처리하는 더 작은 실행 단위다.