프로세스(Process) vs 쓰레드(Thread)

 

 

프로세스(Process)

1. 운영체제로부터 시스템 자원을 할당받는 작업의 단위
2. 컴퓨터에서 연속적으로 실행되고 있는 프로그램
3. 메모리에 올라와 실행되고 있는 프로그램의 인스턴스

 - 하나의 프로세스는 코드 영역, 데이터 영역, 스택 영역, 힙 영역의 4가지 영역으로 이루어져 있음.

 

스레드(Thread)

 프로세스가 할당받은 자원을 이용하는 여러 실행 흐름의 단위

 - 각 스레드는 프로세스 내에서 스레드마다 스택 영역과 레지스터영역을 별도로 할당받는다.

 - 코드 영역, 데이터 영역, 힙 영역은 공유한다.

 

멀티 프로세스

응용프로그램을 여러 개 프로그램 인스턴스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 함

 

장점

 - 프로세스 중 하나에 문제가 발생하면 해당 프로세스만 중지된다.

 

단점

 - 각각의 프로세스는 메모리가 독립적이기 때문에 서로 통신이 어렵다.

   (통신을 못하는것은 아니고, 파일이나 소켓을 통해 통신이 가능하긴 하다)

 - 콘텍스트 스위칭(ContextSwitching)의 오버헤드 비용이 크다.

콘텍스트 스위칭
동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업.

 

멀티 스레드

하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 함

 

장점 

  - 콘텍스트 스위칭(ContextSwitching)시 서로 메모리를 공유하기 때문에 스레드 간 통신 시 비용이 줄어든다.

 

단점

  - 스레드 중 하나에 문제가 발생하면 전체가 영향을 받는다. (메모리를 공유하기 때문에)

  - 메모리를 공유하기 때문에 동기화 문제가 발생할 수 있다.

  - 디버깅이 힘들다.

 

멀티 프로세스 vs 멀티 스레드

대표적인 차이는 스레드는 프로세스의 Code/Data/Heap 영역을 공유한다는 점.

 - 이로 인해 콘텍스트 스위칭 시 자원을 할당하는 시스템 콜이 줄어서, 자원을 효율적으로 사용할 수 있다.

 - 스레드 간에 통신비용이 적음으로 통신 비용과 시간이 단축된다.

 - 동기화 문제만 주의한다면 멀티 스레드 쪽이 여러 이점이 많다.

 

 - 때문에 멀티 프로세스보다는 멀티 스레드를 사용한다.

 

 

댓글

Designed by JB FACTORY