멀티프로세스와 멀티쓰레드는 병렬 프로그래밍을 구현하는 데 사용되는 두 가지 기본적인 접근 방법입니다. 각각의 특징은 다음과 같습니다:
멀티프로세스:
- 독립성: 각 프로세스는 독립적인 메모리 공간을 가지고 실행되기 때문에 하나의 프로세스가 다른 프로세스에게 영향을 미치지 않습니다.
- 신뢰성: 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스는 계속 실행될 수 있습니다.
- 자원 소모: 각 프로세스는 독립적인 메모리 공간을 사용하므로 메모리 소모가 크다. 프로세스 간 통신이 필요한 경우에는 별도의 IPC (Inter-Process Communication) 메커니즘이 필요하다.
- 생성 및 관리의 오버헤드: 프로세스 간 전환 및 생성에는 오버헤드가 발생하며, 자원을 할당하고 해제하는 것도 비용이 크다.
멀티쓰레드:
- 공유 메모리: 모든 스레드는 하나의 프로세스 내에서 실행되므로 같은 메모리 공간을 공유한다. 이로 인해 데이터 공유가 간단하다.
- 성능 향상: 스레드 간 통신이 프로세스 간 통신보다 빠르다. 스레드 간 전환은 프로세스 간 전환보다 효율적이다.
- 자원 소모: 프로세스에 비해 메모리 소모가 적다. 하지만 스레드 간의 자원 공유와 동기화에 신경써야 한다.
- 생성 및 관리의 경제성: 스레드는 프로세스 내에서 생성 및 관리되므로 프로세스보다 빠르게 생성되고 관리된다.
- 동기화 필요: 공유 자원에 대한 동시 접근으로 인한 문제를 해결하기 위해 명시적으로 동기화가 필요하다. 이는 경합 조건 등을 방지하기 위해 스레드 간에 일정한 순서로 실행되도록 하는 메커니즘을 포함한다.
멀티프로세스와 멀티쓰레드는 각각의 상황에 맞게 선택되어야 하며, 작업의 특성, 성능 요구사항, 코드 구조 등을 고려하여 적절한 선택이 이루어져야 합니다.
멀티프로세스:
멀티프로세스는 독립적인 실행 흐름을 가진 여러 프로세스로 구성되며, 각 프로세스는 자체 메모리 공간을 가집니다. 이는 높은 독립성을 제공하며, 한 프로세스의 비정상 종료가 다른 프로세스에 영향을 미치지 않습니다. 그러나 각각의 프로세스는 별도의 메모리를 사용하므로 메모리 소비가 크고, 프로세스 간 통신에는 별도의 IPC 메커니즘이 필요합니다. 또한, 프로세스 간 전환 및 생성에는 오버헤드가 발생하며, 자원을 할당하고 해제하는 것도 비용이 큽니다.
멀티쓰레드:
멀티쓰레드는 하나의 프로세스 내에서 여러 실행 흐름을 가지며, 스레드들은 공유된 메모리를 사용합니다. 이로써 데이터 공유가 간편해지고 성능 향상이 이루어집니다. 그러나 공유 자원에 대한 동기화 문제가 발생할 수 있어 명시적인 동기화가 필요합니다. 또한, 메모리 소모가 상대적으로 적고 스레드 생성 및 관리가 경제적이지만, 동기화 작업을 효율적으로 처리하기 위해 주의가 필요합니다.
각각의 선택은 프로젝트의 요구사항과 성능, 안정성에 따라 달라질 수 있습니다. 멀티프로세스는 안정성이 중요한 상황에서 적합하며, 멀티쓰레드는 성능이 중요한 상황에서 적합할 수 있습니다
'면접준비' 카테고리의 다른 글
테스트코드에 대해서 아는대로 설명해주시고 활용 경험에 대해서 답변해주세요. (0) | 2024.01.26 |
---|---|
쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요. (0) | 2024.01.25 |
프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요. (1) | 2024.01.24 |
TDD에 대해서 설명해주세요. (0) | 2024.01.24 |
클래스형 vs 함수형 (0) | 2024.01.23 |