코다의 Process vs Thread를 보고 주관적으로 정리한 내용입니다.
간단한 용어 정리
- 실행 단위: cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- (부연 설명이 없는) 프로세스: 하나의 스레드만 가지고 있는 단일 스레드 프로세스
- 동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
순서
- Process & Thread
- Multi-process vs Multi-thread
- Multi-core
- 요약
프로그램과 프로셋
종이 레시피 -> 피자
프로그램(코드) -> 프로세스
프로그램이 프로세스가 되기 위해서 2가지 일이 발생
1. 프로세스가 필요로 하는 재료들이 메모리에 올라가야 함
실행 명령을 포함하는 code, static 변수 혹은 global 변수인 data, 동적 메모리 영역인 heap, 지역변수 매개변수 반환값 등등 일시적인 데이터를 담은 stack
2. 해당 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block)가 프로세스 생성과 함께 만들어짐
프로세스의 상태 중에 준비상태느 대기상태의 큐를 구현하기 위해 필요한 pointer, 현재 프로세스 상태를 담는 process state, 고유 번호를 담는 PID, 다음 명령어를 가르키는 program counter 등등이 있음
Process & Thead
-
다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환해서 실행을 시킴
-
동시 실행을 하고 싶은 프로세스 두 개가 있을 때 p1실행 -> p1준비 -> p2실행 -> p2준비 -> p1실행 -> ... 이런 context switching 과정을 거침
-
이런 복잡한 과정을 효율적으로 개선하기 위해 등장한게 경량화된 프로세스 버전인 스레드
-
하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문에 스레드를 경량화된 프로세스라고 하는 것
-
스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용, 스택 부분만 따로 가지고 있음

-
공유되는 자원이 있기 때문에 context switching이 일어날 때 캐싱 적중률이 올라감
Multi-process & Multi-thread
- 멀티 프로세스와 멀티 스레드 이 두 가지 개념이 모두 처리 방식의 일종임!!
여러 사용자가 로그인을 요청하는 상황(한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시에 처리할 수 없음)
- 멀티 프로세스 - 부모 프로세스가 fork()를 해서 자식 프로세스를 여러 개 만들어서 처리, 이 때 자식 프로세스는 부모와 별개의 메모리 영역을 확보
- 반면 스레드는 한 프로세스 내에서 구분지어진 실행 단위
- 멀티 스레드 - 프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행 단위가 나뉘어진 것

- 멀티 스레드가 효율적이지만 하나에 문제가 생기면 전체가 문제가 생길 수 있어 멀티 프로세스를 사용 하는 프로그램도 많음
Multi-core
- 멀티 프로세스와 멀티 스레드와는 달리 하드웨어의 측면에 가까움
- 동시성: 짧은 시간에 cpu의 시간을 분할해서 동시에 하는 것처럼 보임
- 병렬 처리: 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수 있음

번외 리눅스에서 Process와 Thread
- 리눅스 커널에서는 프로세스와 스레드를 동일하게 봄
- 리눅스는 사용자 스레드당 커널 스레드 하나가 매칭되어 있음 - 리눅스 커널 입장에서 보면 '각각의 스레드가 하나의 프로세스다' 라고 표현을 하는 것
- 여기서 말한 프로세스는 메모리를 공유함 - ligth weight process라고 구분해서 부름

사용자 레벨 입장에서 보면 이 스레드 그룹아이디가 pid로 보여지고
커널 입장에서 보면 tid를 pid로 인식
요약
- 프로세스는 프로그램이 실행된 것
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위
- 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리방식(멀티 프로세스, 멀티 스레드)이 있음
- 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하며 context switching을 함
- 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유 - 각각의 장단점이 존재
- 멀티 코이는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세스가 있는 것이다.
https://youtu.be/1grtWKqTn50 [10분 테코톡] 🌷 코다의 Process vs Thread