프로세스와 스레드

상태
시작 전
담당자
날짜
TMI

프로세스와 스레드의 개념

프로세스는 운영체제에서 실행 중인 프로그램의 인스턴스를 의미합니다. 각 프로세스는 독립된 메모리 공간을 가지며, 실행 파일, 데이터, 스택 등을 포함합니다. 프로세스는 운영체제에서 가장 기본적인 실행 단위로, 하나의 프로세스는 하나 이상의 스레드를 포함할 수 있습니다.
스레드는 프로세스 내에서 실행되는 가장 작은 실행 단위입니다. 스레드는 프로세스의 코드, 데이터, 힙 메모리를 공유하지만, 각 스레드는 독립적인 레지스터 집합과 스택을 가집니다. 즉, 하나의 프로세스 내에서 여러 스레드가 동시에 실행되면서 작업을 분담할 수 있습니다.

사용 원리

프로세스는 운영체제의 스케줄러에 의해 관리됩니다. 각 프로세스는 자신의 메모리 공간을 가지고 있으며, 프로세스 간의 통신은 주로 IPC(Inter-Process Communication) 메커니즘을 통해 이루어집니다. 프로세스 간의 문맥 전환은 오버헤드가 크기 때문에 비용이 많이 듭니다.
스레드는 같은 프로세스 내에서 실행되기 때문에 메모리 공간을 공유합니다. 스레드 간의 통신은 공유 메모리를 통해 이루어지며, 이는 프로세스 간 통신보다 빠릅니다. 스레드의 문맥 전환은 프로세스의 문맥 전환보다 비용이 적게 들기 때문에, 멀티스레딩이 성능 향상에 도움이 될 수 있습니다.

두 방식의 차이점

메모리 사용

프로세스는 각자 독립적인 메모리 공간을 가지며, 다른 프로세스와 메모리를 공유하지 않습니다. 반면, 스레드는 같은 프로세스 내에서 메모리를 공유합니다. 이는 스레드가 더 적은 메모리 오버헤드를 가지고 있다는 것을 의미합니다. 하나의 프로세스는 여러 스레드를 가질 수 있습니다.

문맥 전환

프로세스 간의 문맥 전환은 CPU 레지스터, 메모리 매핑, 캐시 등을 모두 변경해야 하기 때문에 비용이 많이 듭니다. 반면, 스레드 간의 문맥 전환은 같은 프로세스 내에서 이루어지기 때문에 훨씬 더 적은 비용이 듭니다.

통신 방법

프로세스는 주로 IPC 메커니즘을 통해 통신합니다. 이러한 방식은 느리고 복잡할 수 있습니다. 반면, 스레드는 같은 메모리 공간을 공유하기 때문에 변수 등을 통해 직접 통신할 수 있어 더 빠르고 효율적입니다.
IPC 메커니즘은 Pipe, Socket, Message Queue, Shared Memory, Semaphora and Mutex를 포함하는 개념입니다

안정성

프로세스는 독립적으로 실행되기 때문에 한 프로세스가 오류로 인해 종료되더라도 다른 프로세스에는 영향을 미치지 않습니다. 반면, 스레드는 같은 메모리 공간을 공유하기 때문에 한 스레드의 오류가 다른 스레드에도 영향을 미칠 수 있습니다. 따라서 스레드를 사용할 때는 동기화 문제와 데드락에 주의해야 합니다.

결론

프로세스와 스레드는 각각의 장단점이 있습니다. 프로세스는 독립적인 실행 환경을 제공하여 안정성이 높지만, 오버헤드가 큽니다. 스레드는 자원을 효율적으로 사용할 수 있지만, 동기화 문제에 주의해야 합니다. 따라서 시스템의 요구사항에 따라 적절한 방식을 선택하는 것이 중요합니다.
쓰레드의 발전 배경
쓰레드는 프로세스보다 더 작은 실행 단위로, 동시에 여러 작업을 처리할 수 있는 기술적 해결책으로 등장했습니다.
프로세스는 많은 자원을 소모하고 느린 문맥 전환으로 인해 성능이 저하될 수 있습니다. 특히 운영 체제가 멀티태스킹을 지원하더라도, 프로세스 간의 전환은 오버헤드가 크고 복잡합니다.
이런 문제를 해결하기 위해 쓰레드가 개발되었습니다. 쓰레드는 하나의 프로세스 내에서 생성되며, 메모리 공간을 공유하면서 실행됩니다. 이는 자원의 효율적 사용을 가능하게 하며, 문맥 전환 비용을 줄여 성능을 개선할 수 있습니다.
또한, 쓰레드는 프로세스 간 통신보다 간단하게 데이터를 공유하고 통신할 수 있습니다. 이로 인해 복잡한 애플리케이션 개발이 더 쉬워졌으며, 실시간 처리나 다중 작업 처리 등에서 큰 이점을 제공합니다.
쓰레드의 등장은 컴퓨터 시스템의 성능과 효율성을 높이는 데 기여하였으며, 현대 소프트웨어 개발에서는 거의 필수적인 기술로 자리 잡고 있습니다.