프로세스(Process)와 쓰레드(Thread)
프로세스(process)
*process :과정, 처리
프로세스란 단어 그대로 본다면 과정, 처리라는 뜻을 가지고 있다.
컴퓨터 용어로 쓰이는 관점에서 본다면 프로세스는 프로그램을 실행하면 OS로 부터 실행에 필요한 메모리를 할당 받아 프로세스가 된다. (실행중인 프로그램을 의미) 프로세스가 실행되는 동안 생성-준비-실행-대기-종료의 상태들을 거치는데, 컴퓨터는 여러 일을 처리할 때 프로그램 요소들이 움직이는 일정에 따라 작업 순서를 매기는데 이를 스케줄링이라고도 부른다. 정해진 일정에 따라 작업을 실행하는 것은 컴퓨터의 CPU(중앙처리장치)이다.
프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원, 그리고 하나 이상의 쓰레드로 구성되어 있다.
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다.
또한, 프로세스는 보통 하나의 루틴(프로그램 처리 경로)을 가지고 있다.
이 루틴은 직렬적이며, 어떠한 일을 수행하는 것에 있어 프로그래머가 원하는 순서대로 일을 처리한다.
→ 앞 뒤 순서가 필요 없는 일들이 있을 때 분리해서 동시에 처리하고 싶다면? 쓰레드를 사용!
JAVA를 예로 든다면 자바 쓰레드를 이용하면 하나의 프로세스에서도 병렬적으로 처리가 가능하다. (여러 개의 처리 루틴을 가질 수 있음) 단순 반복의 코드를 실행할 때도 여러 개의 쓰레드를 만들어서 분리 시킨 뒤, 결과 데이터를 받아 합치면 그만큼 시간을 절약할 수 있다. (자바에서는 Thread 클래스를 상속받거 Runnable 인퍼테이스를 구현해서 생성할 수 있다.)
쓰레드(Thread)
쓰레드는 프로세스내에서 동시에 실행되는 독립적인 실행 단위이다.
프로세스 내에서 각각 stack만 따로 할당 받고 code, data, heap 영역은 공유한다. 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들 (힙 공간 등)과 같은 것들을 쓰레드끼리 공유하면서 실행된다. 같은 프로세스 안에 있는 여러 쓰레드들은 같은 힙 공간을 공유한다.