멀티 프로세스와 멀티 스레드에 대한 개념 정리를 위해 포스팅 한다.
0. Process 와 Thread 란?
- Process
- 운영체제 로부터 시스템 자원을 할당 받는 작업의 단위
- Code, Data, Stack, Heap 의 메모리 영역 구성
- Thread
- Process 내에서 실행되는 작업의 단위
- CPU 이용의 기본 단위
- Code, Data, Heap 영역 공유
- 각 Thread 는 별도의 Stack 영역을 가짐
1. Multi-Process
- 개념
- 2개 이상의 프로세스가 동시에 실행되는 것, 이 때 프로세스 들은 CPU 와 메모리를 공유함
- 여러 프로세스가 동시에 메모리에 적재된 경우, 각 프로세스가 자신의 메모리 영역에만 접근하도록 운영체제가 관리
2. Multi-Thread
- 개념
- 하나의 프로세스 내에서 2개 이상의 스레드가 동시에 작업을 수행하는 것
3. Multi-Process 와 Multi-Thread 의 비교
- Multi-Process 의 Advantage
- 스레드 간의 자원 공유 시 동기화 문제가 발생할 수 있어서 프로그램 설계 시 주의가 필요하고, 하나의 스레드에 문제가 생기면 프로세스 내의 다른 스레드에도 문제가 생길 수 있다. 반면 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높다.
- Multi-Thread 의 Advantage
- 멀티 프로세스를 이용하던 작업을 멀티 스레드로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어들게 된다. 또한 프로세스를 생성하고 자원을 할당하는 등의 System Call 을 생략할 수 있기 때문에 자원을 효율적으로 관리할 수 있다. 뿐만 아니라 Context Switching 시 캐시 메모리를 초기화 할 필요가 없어서 속도가 빠르다. 데이터를 주고 받을 때를 비교해 보면, 프로세스 간의 통신(IPC) 보다 멀티 스레드 간의 통신 비용이 적기 때문에 통신으로 인한 오버헤드가 적다. (통신 시 별도의 자원을 이용하지 않고, 프로세스에 할당된 힙 영역 등을 이용하여 데이터를 주고 받기 때문이다.)
4. 파생 개념
- Process 에서 Context 란?
- Process 가 현재 어떤 상태로 수행되고 있는지에 대한 정보. 해당 정보는 PCB (Process Control Block) 에 저장을 한다.
- PCB (Process Control Block, 운영체제가 Process 에 대해 필요한 정보를 모아 놓은 자료구조) 에 저장되는 것들은 무엇이 있는가?
- Process number
- Process state
- Program Counter (PC), 레지스터
- CPU 스케줄링 정보, 우선 순위
- 메모리 정보 (해당 Process 의 주소 공간 등)
- Context switch 란?
- 한 프로세스에서 다른 프로세스로 CPU 제어권을 넘겨주는 것이다. 이 때 이전의 프로세스의 상태를 PCB 에 저장하여 보관하고 새로운 프로세스의 PCB 를 읽어서 보관된 상태를 복구하는 작업이 이루어진다.
- Process 의 State 에는 어떤 것들이 있는가?
- 실행(running), 준비(ready), 봉쇄(wait, sleep, blocked) 세 가지 상태로 구분된다.
- 실행: 프로세스가 CPU 를 점유하고 명령을 수행 중인 상태
- 준비: CPU 만 할당 받으면 즉시 명령을 수행할 수 있도록 준비된 상태
- 봉쇄: CPU 를 할당 받아도 명령을 실행할 수 없는 상태 - ex. I/O 작업을 기다리는 경우 등
- Volatile 변수
- Volatile 로 선언된 변수의 값을 바꿨을 때 다른 스레드에서 항상 최신 값을 읽어갈 수 있도록 해줌
- 변수의 값을 읽을 때 CPU Cache 에 저장된 값이 아닌 Main 메모리에서 읽음
- 기존에는 CPU Cache 에만 반영되고, 실제 Main 메모리에는 반영되지 않음
- 변수의 값을 읽을 때 CPU Cache 에 저장된 값이 아닌 Main 메모리에서 읽음
5. 출처
- https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%A0%84%EA%B3%B5%EB%A9%B4%EC%A0%91-cs-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5
- http://www.tcpschool.com/java/java_thread_multi
'IT > CS' 카테고리의 다른 글
[CS] Web Socket (0) | 2023.05.16 |
---|---|
[CS] TCP vs UDP (0) | 2023.05.15 |
[CS] Hash Table (2) | 2023.05.14 |
[CS] Index (0) | 2023.05.13 |
[CS] OSI 7 Layer (0) | 2023.05.10 |