Process
- 운영체제로부터 자원(메모리, CPU 시간 등)을 할당 받은 독립적인 실행 단위. 즉, 프로세스는 하나의 프로그램을 실행하기 위해 운영체제로부터 할당받은 자원을 이용하여 실행 중인 프로그램을 의미.
- 각 프로세스는 각자의 주소 공간, 레지스터 집합, 스택, 힙 등을 갖고, 서로의 자원에 접근할 수 없고 다른 프로세스와는 완전히 격리되어 있으며, 프로세스간 통신(IPC)을 위해 별도의 메커니즘을 사용.
- 실행 중인 프로그램을 관리, 운영체제와의 인터페이스를 제공하며 프로그램의 실행 상태를 유지하고, 필요한 자원을 요청하며, 다른 프로세스와 통신하는 등의 작업을 수행.
ex) 워드프로세서와 인터넷 브라우저는 서로 다른 프로세스로 실행. 각 프로세스는 각자의 자원을 할당 받아 독립적으로 실행되며, 서로의 자원에 접근할 수 없음.
Thread
- 하나의 프로세스 내에서 실행되는 작은 실행 단위로 스레드는 프로세스와는 다르게 동일한 주소 공간을 공유하며, 레지스터 집합, 스택 등의 자원을 공유. 이러한 이유로, 스레드는 경량(lightweight) 프로세스라고도 불림.
- 프로세스 내의 코드 실행 흐름을 담당하며, 멀티스레드 프로그래밍을 통해 하나의 프로세스에서 여러 작업을 동시에 처리할 수 있음. 멀티스레드 프로그래밍을 사용하면, 여러 스레드가 동시에 실행되는 동안 각 스레드가 공유하는 자원에 대한 접근을 조율하고 동기화하는 등의 복잡한 작업을 수행해야 할 수 있음.
- 프로세스 내에서 실행되는 작은 실행 단위이므로, 스레드를 사용하면 프로세스 간의 전환보다 더 빠른 컨텍스트 전환(context switch)이 가능하여 스레드를 이용하여 프로그램의 성능을 높일 수 있음.
Ex) 웹 브라우저는 여러 개의 스레드를 사용하여 다른 작업(예: UI 업데이트, 데이터 로드, 네트워크 요청 등)을 동시에 처리하는데 이렇게 하면 사용자는 여러 작업이 동시에 수행되는 것처럼 느낄 수 있음.
결론
- 프로세스는 자원을 독립적으로 할당받아 실행되는 독립 실행 단위이고, 스레드는 하나의 프로세스 내에서 실행되는 작은 실행 단위.
- 스레드는 프로세스의 자원을 공유하기 때문에 경량 프로세스라고 불리며, 멀티스레드 프로그래밍을 통해 동시에 여러 작업을 처리할 수 있음.