---
description: 프로세스 vs 스레드
---

# Process vs Thread

*   **프로그램**

    명령어들의 집합, 수동적인 상태이며 디스크 안에 저장되어있다.
*   **프로세스**

    실행 중인 프로그램, 운영체제로 부터 실행에 필요한 자원을 할당 받은 능동적인 상태
*   **스레드**

    프로세스가 할당받은 자원을 이용하는 실행단위



**자원 공유 여부**

**프로세스**는 독립된 메모리 공간을 사용하므로, 서로 다른 프로세스는 데이터 공유가 불가능합니다. 반면에, **스레드**는 동일한 메모리 공간을 사용하므로, 데이터 공유가 가능합니다.

**생성 비용**

**프로세스**는 프로세스 간 전환 및 IPC를 위한 자원이 필요하므로, 프로세스 생성 비용이 스레드 생성 비용보다 높습니다.

**독립성**

**프로세스**는 각각 독립된 인스턴스이므로, 한 프로세스가 다운되더라도 다른 프로세스는 영향을 받지 않습니다. 반면에, **스레드**는 하나의 프로세스 내에서 실행되므로, 한 스레드의 오류로 인해 전체 프로세스가 중단될 수 있습니다.

**CPU 이용률**

**스레드**는 동일한 프로세스 내에서 실행되므로, 프로세스 간 전환보다CPU 이용률이 높습니다. 따라서, 멀티 스레드 프로그래밍을 통해, CPU 이용률을 향상시킬 수 있습니다.

**동기화와 교착상태**

**스레드**는 공유 메모리를 사용하기 때문에, 동기화 문제가 발생할 수 있습니다. 또한, 서로 다른 스레드가 서로 상대방의 자원을 점유하고 대기하면서 아무것도 진행하지 못하는 교착상태(deadlock)가 발생할 수 있습니다.
