스레드의 이점

멀티스레드 프로그램은 복수 프로세스를 사용하는 기존의 병렬 프로그램에 비해 성능을 향상시킬 수 있습니다. 또한 향상된 성능은 스레드를 사용하여 멀티프로세서 시스템에서 확보할 수 있습니다.

스레드 관리

스레드 관리(즉, 스레드 작성 및 실행 제어)에는 프로세스 관리보다 적은 시스템 자원이 필요합니다. 예를 들어, 스레드 작성에는 스레드의 개인용 데이터 영역 할당만 필요합니다(대개 64KB 및 두 개의 시스템 호출). 프로세스 작성은 전체 상위 프로세스 주소 공간이 중복되기 때문에 비용이 많이 듭니다.

또한 스레드 라이브러리 API는 프로세스 관리용 라이브러리보다 사용하기 쉽습니다. 스레드 작성에는 pthread_create 서브루틴만 필요합니다.

스레드 간 통신

스레드 간 통신은 프로세스 간 통신보다 효율적이며 사용하기 쉽습니다. 프로세스의 모든 스레드가 동일한 주소 공간을 공유하기 때문에 공유 메모리를 사용하지 않아도 됩니다. mutex 또는 기타 동기화 도구를 사용하여 동시 액세스로부터 공유 데이터를 보호하십시오.

스레드 라이브러리에서 제공한 동기화 기능은 유연성 있고 강력한 동기화 도구 구현을 용이하게 합니다. 이러한 도구는 메시지 큐와 같은 기존 프로세스 간 통신 기능을 대체할 수 있습니다. 파이프는 스레드 간 통신 경로로 사용될 수 있습니다.

멀티프로세서 시스템

멀티프로세서 시스템의 경우, 복수 스레드가 복수 CPU에서 동시에 실행될 수 있습니다. 따라서 멀티스레드 프로그램이 단일프로세서 시스템에 비해 훨씬 빠르게 실행될 수 있습니다. 스레드에 더 적은 자원이 필요하고 오버헤드를 적게 생성하기 때문에 이들 스레드는 복수 프로세스를 사용하는 프로그램보다 빠를 수도 있습니다. 예를 들어, 동일한 프로세스에서(특히, 문맥 교환을 종종 피할 수 있는 M:N 라이브러리 모델에서) 스레드를 더 빠르게 교환할 수 있습니다. 마지막으로, 스레드를 사용하는 주요 이점은 단일 멀티스레드 프로그램이 단일프로세서 시스템에서 작동하나 다시 컴파일할 필요 없이 저절로 멀티프로세서 시스템의 장점을 활용할 수 있다는 점입니다.

제한사항

멀티스레드 프로그래밍은 여러 독립 엔터티를 사용하여 병렬 알고리즘을 구현하는 데 유용합니다. 그러나 복수 스레드 대신 복수 프로세스를 사용해야 하는 경우가 있습니다.

많은 운영 체제 ID, 자원, 상태 또는 제한사항은 프로세스 레벨에서 정의되므로 프로세스의 모든 스레드에 의해 공유됩니다. 예를 들어, 사용자와 그룹 ID 및 연관된 권한은 프로세스 레벨에서 처리됩니다. 프로그래밍 엔터티에 다른 사용자 ID를 지정해야 하는 프로그램은 단일 멀티스레드 프로세스 대신 복수 프로세스를 사용해야 합니다. 다른 예제에는 현재 작업 디렉토리 및 개방 파일의 상태 및 최대 수 등과 같은 파일 시스템 속성이 포함됩니다. 이러한 속성이 독립적으로 잘 처리되는 경우, 멀티스레드 프로그램이 적절하지 않을 수 있습니다. 예를 들어, 멀티프로세스 프로그램에서는 각 프로세스가 다른 프로세스의 간섭 없이 많은 파일을 열 수 있습니다.