Operation System
Process and Thread
by orioncsy
2023. 2. 19.
Process and Thread
개념
Program
Process
- 연속적으로 실행되고 있는 프로그램
- 운영체제로 부터 자원을 할당받아 실행하는 작업의 단위
- CPU 시간, 주소 공간, code, data, stack, heap의 구조의 메모리 등을 할당받는다.
- 프로세스 당 최소 1개 이상의 스레드를 할당받는다.
- 각 프로세스는 다른 주소 공간에서 실행되고, 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 다른 프로세스에 접근하기 위해서는 프로세스 간 통신을 사용해야 한다.
Thread
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스 내에서 각 thread는 stack만 할당받고 code, data, heap은 공유한다.
Java Thread
- 일반적인 스레드와 거의 차이가 없고, jvm이 운영체제 역할을 한다.
- 자바에서는 프로세스가 존재하지 않고 스레드만 존재하여 jvm에 의해 스케줄 되는 실행 단위 코드 블록이다.
- 스레드 개수, 실행되는 스레드의 메모리 위치, 상태, 우선순위 등을 jvm에서 관리
멀티 프로세스와 멀티 스레드의 차이점
멀티 프로세스
- 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 하나의 작업을 처리하는 방식
- 장점
- 하나의 프로세스가 문제가 발생해도 다른 프로세스에 영향을 주지 않아 프로그램 실행에 문제가 없다.
- 단점
- context switching
- CPU에서 여러 프로세스를 돌아가며 작업을 하는데 다른 프로세스로 넘어가는 과정
- 작동 중인 프로세스가 대기를 하면서 상태를 보관하고 다음 프로세스가 상태를 가져와 작업
- context switching 과정의 오버헤드 발생
- 프로세스는 각각 독립된 메모리를 할당받기 때문에 context switching 하면서 캐시에 있는 모든 데이터를 지우고 다시 불러와야 한다.
- 프로세스 사이의 복잡한 통신기법(IPC)으로 오버헤드 발생
멀티 스레드
- 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 하나의 작업을 처리하는 방식
- 윈도우, 리눅스는 멀티 프로세싱을 지원하지만 멀티 스레딩을 기본으로 한다.
- 웹 서버가 대표적인 멀티 스레드
- 장점
- 시스템 자원 소모 감소
- 프로세스를 생성하는 데 사용하는 시스템 콜이 줄어 시스템 자원 절약
- 스레드 사이의 작업량이 작아 context switching이 빠르다
- 프로세스 내의 stack을 제외하고 메모리를 공유하여 통신에 대한 부담이 적다.
- 단점
- 설계를 깊게 고민해야 하고 디버깅이 까다롭다.
- 단일 프로세스에서는 효과를 기대하기 어렵다.
- 다른 프로세스에서 스레드를 제어할 수 없다.
- 자원 공유 문제가 발생한다.(동기화 문제)
- 하나의 스레드가 문제가 발생하면 프로세스 전체가 영향을 받는다.
Reference
[OS] 프로세스와 스레드의 차이 - Heee's Development Blog