
프로세스(Process)
프로세스는 실행 중인 프로그램의 인스턴스입니다. 운영 시스템이 프로그램을 실행할 때, 프로그램 코드와 그에 필요한 다양한 리소스(메모리, 파일 핸들, 입출력 디바이스 등)로 구성된 프로세스를 생성합니다. 각 프로세스는 독립된 메모리 영역(프로세스 주소 공간)을 가지며, 다른 프로세스와는 격리되어 있습니다. 이는 프로세스가 독립적으로 실행되며 다른 프로세스의 실행에 영향을 주지 않음을 의미합니다. 프로세스는 최소 한 개 이상의 스레드를 포함합니다.
스레드(Thread)
스레드는 프로세스 내에서 실제로 작업을 수행하는 실행 단위입니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 이 스레드들은 프로세스의 자원을 공유하고 프로세스의 주소 공간 내에서 실행됩니다. 스레드 간의 자원 공유는 스레드가 가벼워짐을 의미하며, 컨텍스트 스위칭 비용이 프로세스간 스위칭보다 낮습니다. 그러나 스레드들이 자원을 공유하기 때문에 동기화 문제가 발생할 수 있습니다.
프로세스와 스레드의 주요 차이점
-
자원 공유
- 프로세스: 각 프로세스는 독립된 메모리 영역을 가지며, 다른 프로세스와 자원을 공유하지 않습니다.
- 스레드: 같은 프로세스에 속한 스레드들은 메모리와 자원을 공유합니다.
-
통신
- 프로세스: 프로세스들은 IPC(Inter-Process Communication) 메커니즘을 통해 통신해야 합니다.
- 스레드: 스레드들은 메모리 공유를 통해 더 쉽고 빠르게 데이터를 교환할 수 있습니다.
-
오버헤드
- 프로세스: 높은 오버헤드를 가지고 있으며, 자원을 독립적으로 관리합니다.
- 스레드: 상대적으로 낮은 오버헤드를 가지며, 컨텍스트 스위칭이 빠릅니다.
-
독립성
- 프로세스: 높은 독립성을 가지며, 하나의 프로세스가 실패해도 다른 프로세스에 영향을 미치지 않습니다.
- 스레드: 낮은 독립성을 가지며, 하나의 스레드에 문제가 발생하면 같은 프로세스 내 다른 스레드에 영향을 줄 수 있습니다.
-
생성과 관리
- 프로세스: 생성과 관리가 비교적 복잡하고 시간이 많이 소요됩니다.
- 스레드: 생성과 관리가 비교적 간단하고 빠릅니다.