프로그램(Program)
프로그램(Static Program)은 실행 가능한 코드의 모음으로, 디스크와 같은 저장 매체에 저장되어 있습니다. 이것은 정적인 상태로 존재하며, 사용자가 실행을 요청할 때까지 아무런 작업도 수행하지 않습니다. 프로그램은 명령어들과 함께 데이터와 메타데이터를 포함할 수 있습니다. 실행되기 위해서는 프로세스로 변환되어야 합니다.
프로세스(Process)
프로세스는 실행 중인 프로그램의 인스턴스입니다. 운영 시스템은 프로세스를 관리하여 CPU 시간, 메모리 공간 등의 자원을 할당합니다. 프로세스는 자신만의 주소 공간과 실행에 필요한 다양한 자원들(예: 파일 핸들, 네트워크 연결 등)을 가지며, 하나 이상의 쓰레드를 포함할 수 있습니다.
쓰레드(Thread)
쓰레드는 프로세스 내에서 실행되는 실행 흐름의 단위입니다. 각 쓰레드는 독립적인 실행 경로를 가지며, 프로세스의 자원을 공유합니다. 이를 통해 멀티쓰레딩을 사용하면 여러 작업을 병렬로 처리할 수 있어 효율성이 높아집니다. 각 쓰레드는 자신의 콜 스택을 가지고 있지만, 메모리나 파일 같은 프로세스 자원은 다른 쓰레드와 공유합니다.
쓰레드의 등장배경
과거에는 프로그램을 실행할 때 하나의 프로세스만 사용했지만, 프로그램의 복잡성이 증가하면서 이 방식은 한계를 드러냈습니다.단일 프로세스를 사용할 경우, 멀티태스킹이 어려워 작업이 끝날 때까지 다른 작업을 할 수 없었고, 여러 프로세스로 작업을 분할하면 메모리와 자원을 비효율적으로 사용해야 했습니다. 이러한 문제를 해결하기 위해 쓰레드가 도입되었습니다.
요약
- 프로그램: 저장 매체에 저장된 실행 가능한 코드의 집합, 실행되기 전의 정적 상태.
- 프로세스: 실행 중인 프로그램의 인스턴스로, 시스템 자원을 할당받아 작업을 수행.
- 쓰레드: 프로세스 내에서 작업 실행의 흐름을 담당하는 단위, 프로세스의 자원을 공유하면서 동시에 여러 작업 처리 가능.