반응형
1. 프로세스(Process)란?
프로세스는 **"메모리 상에서 실행 중인 프로그램"**을 의미합니다. 우리가 컴퓨터에서 워드, 웹 브라우저, 게임 등 하나의 프로그램을 실행하면, 그 프로그램은 하나의 독립적인 프로세스가 됩니다. 프로세스는 운영체제로부터 독립적인 메모리 공간(코드, 데이터, 힙, 스택 영역)을 할당받으며, 이 공간을 다른 프로세스와 공유하지 않습니다. 따라서 하나의 프로세스는 다른 프로세스에 영향을 주지 않고 독립적으로 실행될 수 있습니다.
2. 스레드(Thread)란?
스레드는 **"프로세스 내에서 실행되는 작업의 흐름 단위"**를 의미합니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있습니다. 프로세스가 애플리케이션의 '큰 작업 단위'라면, 스레드는 그 큰 작업 단위 내에서 실제로 CPU를 사용하여 코드를 실행하는 '작은 작업 단위'라고 볼 수 있습니다. 같은 프로세스 내의 스레드들은 해당 프로세스가 할당받은 메모리 공간과 자원(코드, 데이터, 힙 영역)을 공유하며 실행됩니다. 단, 스택 영역은 스레드마다 독립적으로 가집니다.
3. 프로세스와 스레드의 주요 차이점
구분프로세스(Process)스레드(Thread)
| 메모리 공간 | 독립적인 메모리 공간 할당 | 같은 프로세스 내에서 메모리 공간 공유 (스택은 개별) |
| 자원 공유 | 자원을 공유하지 않음 (IPC를 통해 통신) | 프로세스의 자원을 공유 |
| 생성/종료 시간 | 생성 및 종료 시간이 오래 걸림 | 생성 및 종료 시간이 짧음 |
| 컨텍스트 스위칭 | 오버헤드가 큼 (캐시 메모리 초기화 등 무거운 작업 동반) | 오버헤드가 작음 |
| 통신 방법 | 프로세스 간 통신(IPC) 필요 (복잡) | 스레드 간 직접 통신 가능 (공유 메모리 이용, 간단) |
| 결함 영향 | 한 프로세스의 문제가 다른 프로세스에 영향 X | 한 스레드의 문제가 프로세스 전체에 영향 줄 수 있음 |
4. 차이점에 대한 상세 설명
- 메모리 및 자원 공유:
- 프로세스: 각각의 프로세스는 독립적인 메모리 공간을 가집니다. 이는 한 프로세스의 오류가 다른 프로세스에 영향을 주지 않는다는 장점(Fault Isolation)을 제공하지만, 프로세스 간에 데이터를 주고받으려면 별도의 복잡한 통신 메커니즘(IPC: Inter-Process Communication)이 필요합니다.
- 스레드: 동일한 프로세스 내의 스레드들은 프로세스가 할당받은 코드, 데이터, 힙 영역을 공유합니다. 이를 통해 스레드 간 데이터 공유가 훨씬 용이하고 통신 비용이 적게 듭니다. 그러나 공유 자원에 대한 동기화 문제(Race Condition)가 발생할 수 있어, 이에 대한 적절한 처리가 필요합니다. 스레드마다 고유의 스택을 가짐으로써 독립적인 함수 호출과 지역 변수 관리가 가능합니다.
- 컨텍스트 스위칭(Context Switching) 오버헤드:
- 프로세스: CPU가 여러 프로세스를 번갈아 처리할 때, 현재 실행 중인 프로세스의 상태(Context)를 저장하고 다음 프로세스의 상태를 복구하는 과정을 컨텍스트 스위칭이라고 합니다. 프로세스 간 컨텍스트 스위칭은 독립적인 메모리 공간 때문에 캐시 메모리 초기화 등 무거운 작업이 동반되어 많은 시간이 소모되는 오버헤드가 발생합니다.
- 스레드: 스레드 간 컨텍스트 스위칭은 같은 프로세스 내에서 메모리를 공유하므로, 프로세스 간 스위칭보다 훨씬 가볍고 빠릅니다. CPU 레지스터만 저장하고 복구하는 수준으로 처리되는 경우가 많아 오버헤드가 적습니다.
- 생성 및 종료 비용:
- 프로세스는 운영체제로부터 독립적인 자원을 할당받고 해제하는 과정이 필요하므로 생성 및 종료 비용이 많이 듭니다.
- 스레드는 이미 프로세스 내에서 자원을 공유하므로, 프로세스를 새로 만드는 것보다 스레드를 생성하고 제거하는 것이 훨씬 빠르고 효율적입니다.
5. 멀티프로세싱 vs 멀티스레딩
- 멀티프로세싱(Multi-processing): 여러 개의 독립적인 프로세스를 동시에 실행하는 것을 의미합니다. 안정성이 중요한 시스템(예: 웹 서버, 운영체제)에서 주로 사용되며, 한 프로세스에 문제가 생겨도 다른 프로세스에는 영향을 주지 않습니다.
- 멀티스레딩(Multi-threading): 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 것을 의미합니다. 자원을 효율적으로 사용하고 처리율을 높이는 데 유리하여, 게임, 워드 프로세서와 같이 응답성이 중요한 애플리케이션에서 주로 사용됩니다.
반응형