- 프로세스(Process): 운영체제로부터 자원을 할당받은 작업의 단위
- 스레드(Thread): 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
운영체제(OS)에 대한 기본 배경지식이 없다면 무슨 소리인지 이해가 쉽지 않다. 하지만 위 문장에는 설명이 함축적으로 잘 정리되어 있다. 프로세스의 작업의 단위라는 키워드와 스레드의 실행 흐름의 단위라는 키워드를 기억해두고 보자.
프로그램은 그냥 코드 덩어리라고 하면, 프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 의미한다. 즉, 작업중인 프로그램을 의미한다.
작업 관리자를 열어 실행중인 프로그램의 작업을 끝내본 기억은 누구나 있을 것이다. 또 프로세스 초기화를 해본 경험 또한 많을 것이다. 결코 생소한 개념이 아니다.
모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당 해줘야 실행 될 수 있다. 그래서 프로그램을 실행하는 순간 파일은 메모리에 올라가게 되고, 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시켜 우리가 서비스를 이용할 수 있게 되는 것이다.
어플리케이션을 실행 하냐 안하냐의 차이일 뿐이라서, 일반적으로 프로세스와 프로그램을 같은 개념으로 이야기할 때가 많지만, 정의를 해보면 엄밀히 다른 둘의 개념이다.
프로그램:
- 어떤 작업을 하기 위해 실행 할 수 있는 파일
- 파일이 저장 장치에 있지만 메모리에 올라가 있지 않은 정적인 상태
프로세스:
- 실행되어 작업중인 컴퓨터의 프로그램
- 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
과거에는 프로그램을 실행할 경우 프로세스 하나만을 사용해서 이용하였지만, 기술이 발전됨에 따라 프로그램이 복잡해지고 다채로워짐으로써 프로세스 작업 하나만을 사용해서 프로그램을 실행하기에는 한계가 있었다.
오늘날 컴퓨터는 파일을 다운 받으며 다른 일을 하는 멀티 작업은 너무 당연한 기능이라고 생각할지 모르겠지만, 과거에는 파일을 다운받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용하기 때문에 다운이 완료될때까지 하루종일 기다려야 했다. 그렇다고 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하고 CPU에서 할당받는 자원이 중복되게 될 것이다. 스레드(Thread)는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생 하였다.
스레드란, 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다.
즉, 하나의 프로세스 안에서 여러가지 작업들의 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티 스레드라고 부른다.
일반적으로 하나의 프로그램은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다. 즉, 프로세스를 생성하면 기본적으로 하나의 메인 스레드가 생성된다. 스레드 2~3개는 프로그램을 개발한 개발자가 직접 프로그래밍하여 위치 시켜주어야 한다. 그래서 별도로 스레드 프로그래밍이라는 과목이 있는 이유이기도 하다.