프로세스 (Process)
- 정의: 프로세스는 실행 중인 프로그램의 인스턴스입니다. 하나의 프로그램은 여러 프로세스로 실행될 수 있습니다.
- 독립성: 각 프로세스는 독립적인 메모리 공간을 갖고, 다른 프로세스와 메모리를 공유하지 않습니다.
- 자원 할당: 프로세스는 CPU 시간, 메모리 등 시스템 자원을 할당받습니다.
- 안전성: 하나의 프로세스가 오류가 발생해도 다른 프로세스에는 영향을 미치지 않습니다.
- 통신: 프로세스 간 통신(IPC)은 복잡하고, 메시지 패싱, 파이프, 소켓 등을 사용합니다.
스레드 (Thread)
- 정의: 스레드는 프로세스 내에서 실행되는 작업의 단위입니다. 하나의 프로세스는 여러 스레드를 가질 수 있습니다.
- 공유성: 같은 프로세스 내의 스레드는 메모리 공간과 자원을 공유합니다.
- 자원 할당: 스레드는 프로세스 내에서 할당된 자원을 공유합니다. 추가적으로 독립적인 자원 할당이 필요하지 않습니다.
- 성능: 스레드 간 전환은 프로세스 간 전환보다 빠르고, 메모리 공유로 인해 더 효율적인 통신이 가능합니다.
- 안전성: 스레드 간 메모리를 공유하기 때문에 하나의 스레드가 오류를 발생시키면 같은 프로세스 내 다른 스레드에도 영향을 미칠 수 있습니다.
요약
- 프로세스는 독립적인 실행 단위로, 각자 메모리를 독립적으로 사용합니다.
- 스레드는 프로세스 내의 작업 단위로, 메모리를 공유하고 더 가볍습니다.
- 프로세스 간 통신은 복잡하지만 안전합니다.
- 스레드 간 통신은 효율적이지만, 동기화 문제를 처리해야 합니다.
이해를 돕기 위한 그림:
프로세스
----------------------
| 프로세스 1 |
| ------------------ |
| | 스레드 1-1 | |
| | 스레드 1-2 | |
| | 스레드 1-3 | |
| ------------------ |
----------------------
프로세스
----------------------
| 프로세스 2 |
| ------------------ |
| | 스레드 2-1 | |
| | 스레드 2-2 | |
| ------------------ |
----------------------