2023-11-24 작성

프로세스(Process)와 스레드(Thread)의 차이

프로그램 (Program)

우리가 흔히 말하는 프로그램이란 명령어들의 집합이다. 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어를 말한다.

프로세스 (Process)

프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 실행 중인 프로그램이다. 프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 이때, 각각의 프로세스는 서로 메모리 공간을 독자적으로 갖기 때문에 서로 메모리 공간을 공유하지 못한다. 따라서 다른 프로세스의 메모리에 접근하려면 IPC(InterProcess Communication)과 같은 방식이 필요하다. 

  • 멀티프로세싱 : 여러 프로세스를 사용하는 것
  • 멀티태스킹 : 같은 시간에 여러 프로그램을 띄우는 것

스레드 (Thread)

프로세스는 하나 이상의 스레드를 포함하고 있다. 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다. 

스레드는 프로세스 내에서 프로세스의 자원을 이용해서 실제로 작업을 수행하는 일꾼이다. 스레드가 소속된 프로세스가 운영체제로부터 자원을 할당받으면 그 자원을 스레드가 사용한다. 각 스레드는 독자적인 스택(Stack) 메모리를 갖는다. 스레드는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제가 발생 할 수 있다. 

  • 멀티스레드 : 둘 이상의 스레드를 가지는 것 (일반적으로 1개의 프로그램은 1개의 스레드를 가짐)

프로세스 vs. 스레드

프로세스는 운영체제로부터 자원을 할당받는다. 각 작업(Task) 마다 운영체제로부터 자원을 할당받기 위해 시스템 콜(Call)을 하는 부담이 생긴다. 그런데 멀티스레드를 사용한다면 시스템 콜(call)을 한번만 해도 되기 때문에 효율적이다.

또한 IPC 방식보다는 스레드간 통신이 덜 복잡하고 시스템 자원 사용이 더 적으므로 통신의 부담도 줄일 수 있다. 스레드 간 동기화 문제가 생겨 개발자가 신경써야 하는 단점이 있지만 작업(Task)의 비용을 줄인다는 장점이 있다.