공부
프로세스(Process)와 스레드(Thread)의 차이
코딩하는 둥아
2023. 1. 19. 15:14
728x90
운영체제 입장에서 작업의 최소 단위는 프로세스이고, CPU 입장에서 작업의 최소 단위는 Thread이다.
프로세스(Process)란
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- CPU 시간
- 운영되기 위해 필요한 주소 공간
- Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역
- 한마디로 실행된 프로그램을 의미함
- 어떠한 작업을 위해 실행할 수 있는 파일
- 기본적으로 각 프로세스는 1개의 스레드를 가진다.
- 각 프로세스는 독립된 메모리 영역이므로 다른 프로세스의 변수나 자료 구조에 접근할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process-Communication)를 사용해야 한다.
스레드(Thread)란
- 프로세스 내에서 실행되는 흐름의 단위
- 스레드는 프로세스 내에서 Stack을 따로 할당받고, 나머지 Code, Data, Heap 영역은 공유한다.
멀티 프로세스 vs 멀티 스레드
멀티 프로세스
- 하나의 응용 프로그램을 여러 프로세스로 구성하여, 각 프로세스가 하나의 태스크를 처리하도록 하는 것이다.
- 장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하더라도, 하나의 프로세스가 죽는 것 이상으로 영향이 확산되지 않는다.
- 단점
- 각 프로세스들이 통신하기 위해서는 IPC 통신 기법을 사용하는데, 어렵고 복잡함
- 프로세스는 각각 독립된 메모리 영역을 가지기 때문에, 하나의 프로그램에 속하는 프로세스들이 서로 변수를 공유할 수 없다.
- Context Switching
- 이 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고, 많은 시간이 소모되는 오버헤드가 발생하게 된다.
- 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 Context Switching이 발생하면 캐쉬에 있는 모든 데이터를 리셋하고 다시 캐쉬 정보를 불러와야 한다.
- 각 프로세스들이 통신하기 위해서는 IPC 통신 기법을 사용하는데, 어렵고 복잡함
Context란?
프로세스의 경우 현재 프로세스가 중단되었을 때, 중단된 시점부터 다시 프로세스를 실행하기 위한 정보
Context Switching이란?
CPU의 코어가 1개라면 동시에 하나의 프로세스만 실행이 가능하다. 그래서 CPU scheduling을 통해 하나의 CPU를 여러 작업들이 공유할 수 있게 cpu시간을 나누어 작업을 수행한다.
이 때, 프로세서가 실행되던 프로세스를 중지하고 다른 프로세스를 실행하는 것을 Process Context Switching이라고 한다.
동일한 프로세스 내에서 하나의 쓰레드를 중지하고 다른 쓰레드를 실행하는 것은 Thread Context Switching이라고 한다.
* 따라서 Context Switching의 최소 단위는 쓰레드이다!
멀티 쓰레드
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 태스크를 처리하도록 하는 것
- 장점
- 시스템 처리량 증가 및 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
- Context Switching이 빠르다 (스레드는 stack영역과 register의 주소를 포함한 context만 변경하면 됨.)
- 스레드는 프로세스 내의 Stack을 제외한 자원을 공유하기 때문에, 통신의 부담이 적다
- 시스템 처리량 증가 및 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
- 단점
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
- 멀티 스레드의 경우 자원 공유의 문제가 발생한다.
- 다른 프로세스에서 스레드를 제어할 수 없다.
참고 링크
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://velog.io/@curiosity806/Context-Switching%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-process%EC%99%80-thread
728x90