C#

[이것이 C#이다] 멀티 프로세스 vs 멀티 스레드 관련 깨알지식ㅍ

인생개발 이정환 2024. 9. 21. 17:15

GUI가 없는 프로세스, 즉 백그라운드 프로세스서버 프로세스와 같은 경우, 멀티프로세스 방식이 유용한 이유는 주로 다음과 같은 특성 때문입니다:

1. 안정성 (Crash Isolation)

멀티프로세스 방식에서는 각 작업이 별도의 프로세스에서 실행됩니다. 즉, 하나의 프로세스가 오류로 인해 종료되더라도 다른 프로세스에는 영향을 주지 않습니다. GUI가 없는 서버나 백그라운드 프로그램은 장기간 실행되는 경우가 많기 때문에, 하나의 프로세스가 실패할 때 전체 시스템에 영향을 주지 않는 것이 중요합니다. 멀티프로세스는 이러한 충돌 격리 기능을 제공합니다.

2. 병렬성 (Concurrency)

멀티프로세스 방식은 시스템의 다중 CPU 또는 코어를 효과적으로 활용할 수 있습니다. 각각의 프로세스는 다른 코어에서 병렬로 실행될 수 있으며, 이는 병렬 작업 처리 성능을 극대화하는 데 유용합니다. GUI가 없는 백그라운드 작업이나 서버는 종종 동시 요청 처리대용량 데이터 처리가 필요하므로, 이때 병렬 처리는 필수적입니다.

3. 독립된 리소스 관리

각각의 프로세스는 자신의 메모리 공간을 독립적으로 가지고 있습니다. 멀티쓰레드 방식과 달리, 멀티프로세스는 프로세스 간 메모리를 공유하지 않기 때문에 메모리 관리에서 발생하는 동기화 문제나 데이터 경쟁을 줄일 수 있습니다. 백그라운드 프로세스에서는 효율적인 메모리 관리가 매우 중요한데, 멀티프로세스는 이러한 요구 사항을 잘 충족합니다.

4. 보안성 (Security)

멀티프로세스 환경에서는 각 프로세스가 격리된 메모리 공간을 사용하므로, 프로세스 간의 접근이 엄격하게 제한됩니다. 따라서 하나의 프로세스가 악성 코드에 감염되거나 보안상의 취약점을 노출하더라도, 다른 프로세스에 그 영향이 미치지 않습니다. 서버나 백엔드 시스템에서 보안은 중요한 요소이며, 멀티프로세스는 보안에 대한 요구 사항을 더 잘 충족할 수 있습니다.

5. 스케일링과 부하 분산 (Scalability and Load Distribution)

서버 프로세스나 백그라운드 작업에서는 스케일링이 중요한데, 멀티프로세스 방식은 여러 프로세스를 클러스터로 구성하거나 로드 밸런싱을 통해 더 쉽게 확장할 수 있습니다. 예를 들어, 여러 클라이언트 요청을 처리할 때, 각각의 요청을 별도의 프로세스에 할당하면 시스템 부하를 고르게 분산할 수 있습니다.

6. 데드락(Deadlock) 방지

멀티쓰레드 환경에서는 스레드 간의 자원 경쟁이나 교착 상태(데드락) 같은 동기화 문제가 발생할 수 있습니다. 반면, 멀티프로세스 방식은 각 프로세스가 독립적이므로 이러한 문제들이 줄어듭니다. 서버나 백엔드 프로세스에서는 동시성 문제를 최소화하는 것이 중요한데, 멀티프로세스는 이러한 요구를 충족시킬 수 있습니다.

7. 장기 실행과 업데이트 유연성

서버나 백그라운드 프로세스는 장기간 실행되는 경우가 많습니다. 이 경우 멀티프로세스 방식은 프로세스를 개별적으로 종료하고 재시작할 수 있는 유연성을 제공합니다. 이로 인해 전체 시스템을 중단하지 않고도 일부 프로세스의 업데이트패치 작업이 가능해집니다.