🚀 Program & Process & Thread
🔥 프로그램 – 파일 시스템에 존재하는 실행파일, 정적인 개념으로 컴터에 저장된 실행파일들을 지칭
🔥 프로세스 – 메모리에 올라와 실행되고 있는 프로그램의 인스턴스, 동적인 개념으로 실행된 프로그램을 지칭
🔥 쓰레드 – 프로세스 내에서 할당 받은 자원을 이용해 동작하는 실행 단위
📍 프로세스 vs. 쓰레드
프로세스
- 운영체제로부터 독립된 메모리 영역을 할당 받는다.
- 프로세스들은 독립적이기 때문에 통신하기 위해 IPC를 사용
- 최소 1개의 쓰레드를 갖고 있다.
쓰레드
- 프로세스 내에서 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유
- 프로세스의 자원을 공유하기 때문에 다른 쓰레드에 의한 결과를 즉시 확인 할 수 있다.
- 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용해 실행된다.
📍 멀티 프로세스 vs. 멀티 쓰레드
멀티 프로세스 – 하나의 프로그램을 여러 개의 프로세스로 구성해서 각 프로세스가 1개의 작업을 처리하도록 하는 것
- 1 개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행
- Context Switching을 위한 오버헤드(캐시 초기화, 인터럽)가 발생
- 프로세스가 각각 독립적인 메모리를 할당 받았기 때문에 통신하는 것이 어렵
멀티 쓰레드 – 하나의 프로그램을 여러 개의 쓰레드로 구성해서 각 쓰레드가 1 개의 작업을 처리하도록 하는 것
- 프로세스를 위해 자원을 할당하는 시스템콜이나 Context Switching의 오버헤드를 줄일 수 있다.
- 쓰레드는 메모리를 공유하기 때문에, 통신이 쉽고 자원을 효율적으로 사용할 수 있다.
- 하나의 쓰레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
- 여러 쓰레드가 하나의 자원에 동시에 접근하는 경우 동기화 문제가 발생할 수 있다.