프로세스와 스레드에 대해 알아보자.
목차
1. 프로세스란?
2. 스레드란?
3. 프로세스와 스레드의 차이점
프로세스란?
프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 말한다. 즉, 컴퓨터에서 작업 중인 프로그램을 의미한다.
우리가 항상 보던 작업 관리자를 열어보면 프로세스가 있는 것을 볼 수 있다.
모든 프로그램은 운영체제가 실행되기 위해 메모리 공간을 할당해 줘야 실행될 수 있다. 그래서 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고, 운영체제로부터 시스템 자원을 할당받아 프로그램 코드를 실행시켜 우리가 서비스를 이용할 수 있게 되는 것이다.
프로세스의 메모리 영역
- Code 영역
- 실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역이다. CPU는 코드 영역에서 저장된 명령어들을 하나씩 처리한다.
- Data 영역
- 코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역이다. 프로그램이 실행되면서 할당되고 종료되면서 소멸한다.
- Stack 영역
- 함수 안에서 선언된 지역변수, 매개변수, 리턴값 등이 저장된다. 함수 호출 시 기록되고 종료되면 제거된다.
- Heap 영역
- 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간이다.
예를 들어, 웹 브라우저를 열면 그것은 각각 프로세스가 되는 것이다. 프로세스는 프로그램의 코드뿐만 아니라 실행 중인 프로그램에 필요한 데이터, 메모리, 시스템 자원 등을 포함한다. 한 컴퓨터에서 여러 개의 프로세스가 동시에 실행될 수 있고, 각각은 독립적으로 실행되어 다른 프로세스에 영향을 미치지 않는다.
과거에는 프로그램을 실행할 때 프로세스 하나만을 사용해서 이용했었다. 하지만 기술이 발전됨에 따라 프로그램이 복잡해지고 다채로워짐으로써 프로세스 작업 하나만을 사용해서 프로그램을 실행하기에는 한계가 있었다. 오늘날 컴퓨터는 파일을 다운 받으며 다른 일을 하는 멀티 작업은 너무 당연한 기능이라고 생각하지만, 과거에는 파일을 다운받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용하기 때문에 다운이 완료될 때까지 하루종일 기다려야 했다. 그렇다고 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하고 CPU에서 할당받는 자원이 중복되게 될 것이다. 스레드는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생하였다고 한다.
스레드란?
스레드는 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다. 쉽게 말하자면, 크롬 브라우저가 실행 되면 프로세스 하나가 생성될 것이다. 그런데, 우리는 브라우저에서 파일을 다운 받으며 온라인 쇼핑을 하면서 게임을 하기도 한다. 즉, 하나의 프로세스 안에서 여러가지 작업을 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름을 스레드라고 하며 여러 개가 있다면 이를 멀티(다중) 스레드라고 부른다.
아래 그림에서 보듯이 하나의 프로세스 안에 여러 개의 스레드들이 들어 있다고 보면 된다. 스레드 수가 많을 수록 당연히 프로그램 속도도 동시에 하는 작업이 많아져 성능이 올라간다.
일반적으로 하나의 프로그램은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다. 즉, 프로세스를 생성하면 기본적으로 하나의 main 스레드가 생성되게 된다. 스레드 2개, 3개.. 는 프로그램을 개발한 개발자가 직접 프로그래밍하여 위치 시켜주어야 한다. 그래서 별도로 스레드 프로그래밍 과목이 있는 이유이기도 한다.
프로세스와 스레드의 차이점
- 정의
- 프로세스 : 컴퓨터에서 실행되는 프로그램의 인스턴스이다.
- 스레드 : 하나의 프로세스 내에서 동시에 진행되는 작업 갈래이다.
- 기억 공간
- 프로세스 : 자체적인 별도의 메모리 공간이 있다.
- 스레드 : 프로세스 내에서 메모리 공간을 공유한다.
- 생성
- 프로세스 : 프로세스 생성은 상위 프로세스의 메모리 복제를 포함하므로 리소스 집약적이고 속도가 느리다.
- 스레드 : 스레드를 생성하는 것은 프로세스와 메모리를 공유하므로 리소스 집약도가 낮고 속도도 빠르다.
- 통신
- 프로세스 : 프로세스 간 통신은 별도의 메모리 공간으로 인해 복잡하고 속도가 느리다.
- 스레드 : 스레드 간 통신은 동일한 메모리 공간을 공유하므로 더 쉽고 빠르다.
- 제어
- 프로세스 : 운영 체제에 의해 제어된다. 각 프로세스는 독립적으로 작동한다.
- 스레드 : 프로세스 내의 모든 스레드는 프로세스 변경으로 인해 영향을 받을 수 있다.
- 충돌 영향
- 프로세스 : 하나의 프로세스 충돌은 다른 프로세스에 직접적인 영향을 미치지 않는다.
- 스레드 : 스레드 충돌은 동일한 프로세스 내의 다른 스레드에 영향을 미칠 수 있다.