프로세스는 메모리 상에서 실행중인 프로그램을 말하며,
스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
어플리케이션 하나가 프로세스이고,
그 안에서의 분기 처리가 스레드가 된다.
1. 프로세스
process
- 운영체제로부터 자신만의 고유의 공간과 자원을 할당받는 작업의 단위
1-1. 프로세스의 문제점
- 프로세스 생성에 큰 오버헤드가 있다. (프로세스를 생성할때 많은 시간이 소요됨)
- 프로세스 컨텍스트 스위칭의 비효율성, 오버헤드가 큼
- 프로세스 사이에 통신이 어렵다는점 (IPC 사용해야함)
✔️ IPC
- 프로세스 간 통신(Inter-Process Communication, IPC)
- 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
2. 스레드
thread
- 할당 받은 자원을 이용하는 실행의 단위
- 프로세스 내에 여러개가 생길 수 있음
- 다른 스레드와 공간과 자원을 공유하며 사용
스레드의 출현 목적
- 프로세스보다 크기가 작은 실행 단위 필요
- 프로세스의 생성 및 소멸에 따른 오버헤드 감소
- 빠른 컨텍스트 스위칭
- 프로세스들의 통신 시간, 방법 어려움 해소
스레드 주소공간
하나의 스레드가 동작하기 위해 총 6개의 공간이 있다.
- (1) 사적공간
- 스레드 코드 공간
- 스레드 전용 전역변수 공간
- 스택 공간
- (2) 공유공간
- 데이터 공간
- 힙 공간이 있다
- (3) 커널 스택
3. 멀티 프로세스 & 멀티 스레드
3-1. 멀티 프로세스
- 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)를 처리하는 것
- 장점
- 하나의 프로세스가 잘못 되어도 프로그램은 동작 함
- 단점
- context switching 비용 발생
3-2. 멀티 프로세스
- 프로그램을 여러개의 쓰레드로 구성하고 각 쓰레드가 작업(task)를 처리하는 것
- 장점
- 시스템 자원 소모 감소
- 처리 비용 감소(실행 속도 향상)
- 쓰레드간 자원 공유(stack을 제외한 영역)
- 단점
- 디버깅 어려움
- 동기화 이슈 발생
- 하나의 쓰레드의 오류로 전체 프로세스에 문제 발생
4. Thread Safe
- 여러 thread가 동시에 사용되어도 안전하단 것
- 특정 함수 A 와 변수 AA 가 여러 스레드에서 호출되어도 하나의 스레드에서 호출했을 때와 같은 결과가 보장되어야 한다는 의미
- 함수가 전역 변수를 참조하게 된다면 그 함수는 thread safe 하지 않은 결과가 나올 수 있음
✔️ 전역 변수
5. Context Switching
- CPU 에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정
- 동작중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고 대기 하고 있다가
다시 실행시 복구하는 비용(시간)
(참고)
공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.