프로세스와 스레드 차이

프로세스와 스레드는 어떤 차이를 갖고 있을까

#OS #Process #Thread


프로세스와 스레드의 차이

프로세스와 스레드는 어떤 차이를 가지고 있을까요. 관련 서적에는 이런식으로 정의되어 있더라고요.

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위다.

먼저 그림으로 쉽게 알아봅시다.

Process and Thread

위의 그림만 봐도 차이는 쉽게 알 수 있습니다. 조금 더 디테일하게 비교해보자면!

먼저 메모리 사용에 대한 차이가 있습니다. 프로세스는 자신만의 고유 메모리를 할당 받아 사용합니다. 그러니까 독립적으로 실행되지요. 운영체제로부터 프로세서도 할당받고 주소공간, 메모리 자원 등을 할당 받습니다. 반면에 스레드는 하나의 프로세스 내의 여러 흐름인 것처럼 프로세스 내의 주소 공간이나 자원을 공유해서 실행됩니다.

이를 그림으로 본다면 아래와 같다고 볼 수 있지요.

Usage Memory

이와같은 특성으로 인해 스레드 간의 전환 속도가 프로세스 간의 전환보다 더 빠릅니다. 그렇다고해서 스레드는 장점만 있는 것이 아닙니다. 스레드 간의 잘못된 자원 공유로 인해 오류가 발생할 수 있지요.


정리해보면,

스레드의 장점

  • 프로그램의 응답 시간이 단축되며 시스템의 자원 소모가 줄어든다.
  • 스레드간의 통신 방법이 프로세스 간 통신 방법에 비해 훨씬 간단하다.

스레드의 단점

  • 프로세스 밖에서 각각의 스레드를 제어할 수 없다.
  • 미묘한 시간차나 잘못된 변수를 스레드끼리 공유하게 되는 경우에는 오류가 발생할 수 있다.
  • 프로그램 디버깅이 상대적으로 어렵고 단일 프로세서(Single Processor) 시스템에서는 효과를 기대하기 어렵다.