쿼리치의 Process vs Thread를 보고 주관적으로 정리한 내용입니다.
기본적으로 머릿속에 넣어둬야 하는 개념
- 프로세스(단일 스레드 프로세스) - 자원 할당 단위
- 스레드 - 작업 단위
목차
- 멀티 프로세스
- 멀티 스레드
- 멀티 코어
멀티 프로세스
프로세스
- 프로세서(cpu)를 통해 실행되는 프로그램(작성한 코드).
- 프로그램을 시스템 메모리(RAM)에 올려 프로세서로 이동
- 프로세서로 이동한 명령어들은 파이프라인이라고 불리는 큐에 쌓이고 이를 프로세서가 하나하나 순서대로 실행
멀티 태스킹
- cpu는 한 번에 하나의 프로세스만 실행
- 여러 프로세스를 짧은 시간을 주기로 번갈아 진행시키기 때문에 우리 입장에서는 모든 프로세스가 동시에 진행되는 것처럼 보임 - context switching
- cpu가 각각의 프로세스가 얼마나 진행되었고, 다음에 실행해야할 명령이 무엇인지는 각 프로세스가 가지고 있는 Process Control Block에 저장됨
Process Control Block
- Pointer: 프로세스의 현재 위치를 저장하는 포인터 정보
- Process State: 프로세스의 상태 (생성, 준비, 실행, 대기, 종료)
- Process Number(PID): 프로세스의 고유 번호
- Program Counter: 프로세스의 다음 명령어의 주소를 포함하는 카운터 저장
등등이 저장되어 있음
프로세스 구조
- 프로세스는 4가지 영역으로 구성되어 있음
- Code: 컴파일된 소스코드가 저장되는 영역
- Data: 전역 변수, static 변수가 저장되는 영역
- Heap: 동적으로 생성되는 데이터가 저장되는 영역
- Stack: 호줄된 함수 혹은 지역 변수가 저장되는 영역
멀티 프로세스의 단점
- 한 작업을 여러 프로세스가 나누어 작업한다고 가정
- 각 프로세스는 서로 같은 Code, Data, Heap을 가지고 있음
- 작업을 수행하기 위해 프로세스의 Code, Data, Heap이 메모리에 적재
- cpu가 작업을 수행하기 위해 Context Switching을 진행하게 된다면 서로 동일한 Code, Data, Heap을 가지고 있음에도 메모리에 올리고 내리는 작업을 반복해 비효율적임
- 각 프로세스가 가지고 있는 정보를 서로 사용해야 할 경우에 IPC 통신도 요구됨
- 같은 작업을 나누어서할 뿐인데 중복과 불필요한 통신을 하게 됨
멀티 스레드
스레드
- 프로세스의 자원들이 메모리에 적재됨과 동시에 cpu는 스레드라는 작업을 주어진 자원을 통해서 수행
멀티 프로세스 vs 멀티 스레드
- 멀티 프로세스의 단점을 보완해내기 위해 멀티 스레드가 등장
- 스레드: 한 프로세스 내부의 실행 단위. 프로세스 내부에서 Code, Data, Heap영역을 서로 다른 스레드가 공유 가능
- cpu에서는 스레드 간 Context Switching을 위해 PCB 내부에 있는 Register Block을 통해 스레드를 구분
- 멀티 스레드로 분할 작업을 수행하게 된다면 Code, Data, Heap을 모두 메모리에 올리고 내리는 무거운 작업을 수행할 필요가 없어짐
- 스레드를 구분할 Register Block만 교체하면 됨!!
- 또한 모든 스레드가 같은 프로세스 내부에서 존재하기 때문에 통신 비용도 매우 낮음

멀티 스레드의 단점
- Code, Data, Heap을 공유하기 때문에 스레드가 동시에 같은 데이터에 접근할 경우 문제가 발생할 수 있음 -> 이런 상황을 방지하기 위해 동기화를 신경써야 함
- 스레드는 한 프로세스 내부의 여러 작업 갈래이기 때문에 한 스레드가 영향을 받는다면 전체 프로세스가 영향 받을 수 있음
멀티 코어
- 멀티 프로세스, 멀티 스레드와 달리 멀티 코어는 물리적인 측면에 가까움
- 코어는 cpu에서 작업하는 주체 = 파이프라인에 들어오는 명령어들을 수행해주는 존재
병렬 처리의 종류
- 하이퍼 스레딩: 코어 하나에 파이프라인을 두 개로 쪼개어 한 코어 내부에서 병렬적으로 명령들을 수행하는 방법 - 같은 프로세서를 사용
- 멀티 코어: 파이프라인마다 독립적인 프로세서가 존재해서 같은 프로세서를 사용하지 않음
- 멀티 cpu: cpu 여러 대를 병렬로 연결하여 작업을 수행하는 방법 - 가장 성능이 좋지만 가장 비싸서 서버 규모에서 주로 사용
https://youtu.be/C_P0wHFp1o4 [10분 테코톡] 쿼리치의 Process vs Thread