프로세스(Process)란 시스템으로부터 할당받은 메모리에 적재된 프로그램의 인스턴스를 말하고
스레드(Thread)란 하나의 프로세스 내에서 할당받은 메모리를 이용하는 동작하는 실행의 흐름 입니다.
프로세스는 최소 1개의 스레드를 가지고 있고 프로세스는 독립된 메모리 영역을 갖지만 스레드 간에는 code와 Data, Heap(동적 메모리)를 공유하게 됩니다.
단순히 둘의 차이에 대한 비교는 간단하기 때문에 관련된 주제들을 몇가지 더 알아보겠습니다.
컨텍스트 스위칭(Context Switching)에 대해
Context란 무엇일까?
- CPU가 해당 프로세스를 실행하기 위해 필요한 프로세스의 정보들을 말한다.
- 컨텍스트는 각각의 프로세스의 PCB(Process Control Block, Process descriptor라고도 한다)에 저장된다.
- 저장되는 정보로는 (프로세스의 위치를 저장하는)포인터, 프로세스의 상태, 프로세스의 번호, 프로그램 카운터, 레지스터 등이 있다.
컨텍스트 스위칭이란?
- 하나의 프로세스가 CPU를 점유하고 있는 상태에서 다른 프로세스를 실행하기 위해 이전의 프로세스에 대한 정보(Context)를 PCB에 보관하고 다른 프로세스의 정보를 적재하여 실행하는 작업을 말한다.
컨텍스트 스위칭을 하는 이유?
- 현재 실행중인 프로세스보다 빠른 처리가 요구되는 프로세스가 발생할 경우 컨텍스트 스위칭을 하여 우선순위가 높은 프로세스를 먼저 처리할 수 있다.
멀티 프로세스(Multi Process)와 멀티 스레드(Mutli Thread)
멀티 프로세스란?
- 하나의 프로그램의 각각 다른 부분들을 여러개의 프로세스에서 병렬적으로 실행하는 것을 말한다.
멀티 프로세스의 장점
- 여러 개의 자식 프로세스 중 하나의 자식 프로세스에 문제가 발생해도 다른 프로세스에는 영향을 주지 않는다.
멀티 프로세스의 단점
- 각각의 프로세스는 독립된 메모리를 할당 받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어 메모리 공을 비교적 많이 차지하고 컨텍스트 스위칭을 할 때마다 캐시 메모리를 비워야 하므로 오버헤드가 크다.
멀티 스레드란?
- 하나의 프로세스에서 여러 스레드를 구성해 각 스레드가 자원을 공유하며 부분적인 작업을 처리하는 것
멀티 스레드의 장점
- 스레드는 code, data, heap memory를 공유하므로 컨텍스트 스위칭 시 캐시 메모리를 비울 필요가 없어 오버헤드가 적다.
- 프로세스 간 통신보다 스레드 간의 통신 방법이 훨씬 간단하므로 통신 비용이 절약 된다.
멀티 스레드의 단점
- 하나의 쓰레드에 문제가 발생할 경우 같은 메모리를 공유하는 다른 스레드들에게도 영향을 미칠 수 있다.
- 데이터 영역과 힙 영역을 공유하므로 경쟁상태에 있기 때문에 스레드들의 자원 접근 순서에 따라 결괏값이 달라질 수 있다.
(참고)
임계구역(Critical Section): 여러개의 스레드나 프로세스가 공유되는 자원에 동시에 접근하거나 잘못된 순서로 접근할 가능성이 있는 코드 영역(Race Condition이 발생할 수 있는 코드 부분)
'IT 지식' 카테고리의 다른 글
경쟁상태(Race Condition)에 대해 (0) | 2021.12.16 |
---|---|
데이터베이스 정규화(Normalization)란? (0) | 2021.12.16 |
HTTP와 HTTPS의 차이 (0) | 2021.12.10 |