[Basic] 프로세스(Process)와 쓰레드(Thread) 비교

정리


프로세스(Process)

  • 운영체제로부터 자원을 할당받는 작업의 단위
  • 프로그램에 대한 인스턴스
  • 기본적으로 모든 프로세스는 하나 이상의 쓰레드를 가짐(메인 쓰레드)
  • 자신만의 고유 공간과 자원을 할당받음(메모리 공간과 자원 소모가 상대적으로 큼)

쓰레드(Thread)

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스 내에서 실제 작업을 수행
  • 프로세서 내의 주소 공간이나 자원들을 대부분 공유
  • 스택 영역만 Switching하면 되므로 Context Switching 속도가 상대적으로 빠름
  • 자원 공유로 인한 동기화 문제 발생
  • 디버깅 어려움

프로세스와 쓰레드의 차이점

  • 프로세스는 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다.
  • 스레드는 해당 스레드를 위한 스택을 생성할 뿐 그 이외의 Code, Data, Heap영역을 공유한다.

스택을 독립적으로 할당하는 이유

  • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
  • 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다.

Code 영역을 공유

  • 프로세스는 독립적인 구조이기 때문에 다른 프로세스의 Code영역에 있는 함수를 호출할 수 없다.
  • 스레드는 Code영역을 공유하기 때문에 두개 이상의 쓰레드가 자신이 포함된 프로세스의 Code영역에 있는 함수를 호출할 수 있다.

Data, Heap 영역을 공유

  • 전역 변수와 동적 할당된 메모리 공간을 공유할 수 있고, 이를 통해 쓰레드 간 통신을 할 수 있다.
  • 대신 동시에 메모리에 접근하기 때문에 주의 해야 한다.

참고