Process vs Thread
스터디 Stacked-Book에서 실습과 그림으로 배우는 리눅스 구조 책을 참고하여 학습 후 정리한 글입니다.
Process vs Thread
Process와 Thread 란?
Process
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
- 운영체제로부터 시스템 자원을 할당 받는 작업의 단위
- 할당 받는 시스템 자원은 CPU 시간, 운영에 필요한 주소 공간, Code,Data,Heap 구조로 되어있는 독립된 메모리 영역 등이 있다.
Thread
- 프로세스의 특정한 수행 경로
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
Multi Process와 Multi Thread
Multi Process
- 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(태스크)을 처리하도록 하는 것이다.
장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
단점
- 컨텍스트 스위칭에서 오버헤드
- 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어 프로세스 간의 Context Switching 시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다.
- 프로세스 사이의 통신이 복잡하고 어렵다.
- 파이프,파일,소켓 등을 이용해 다른 프로세스의 자원에 접근해야 한다. (IPC, inter-process communication)
Multi Thread
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다.
장점
- (프로세스를 생성하며 자원을 할당하는) 시스템 자원 소모 감소 (자원의 효율성)
- 둘 이상의 작업을 병렬로 처리 할 수 있기때문에 속도적인 이점이 있다 (시스템 처리량 증가)
- 간단한 통신 방법으로 인해 프로그램 응답 시간 단축
단점
- 다른 프로세스에서 스레드를 제어할 수 없다.
- 멀티 스레드의 경우 자원 공유의 문제가 발생한다.
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
Multi Process와 Multi Thread가 사용되는 예시
- 예전 익스플로어에서 여러 개의 탭을 쓰다가 멈춘 경험이 있을 것이다. 그럴 때 중간에 작동이 중단이 되고 모든 프로세스가 종료 된다. 즉 하나의 쓰레드(하나의 탭)이 문제가 생기면 전체 프로세스에 영향이 가게 된다.
- 반면 크롬은 멀티 프로세스를 이용하기 때문에 멀티탭 간의 영향을 주지 않는다.
정리
- 프로세스는 프로그램이 실행된 것이다.
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
- 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식 (
멀티 프로세스
,멀티 스레드
)이 있다. - 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하여 context switching을 한다.
- 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다. 각각의 장단점이 있다.
- 멀티 코어는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것이다.
This post is licensed under CC BY 4.0 by the author.