본 시리즈는 특정 회사의 면접 질문에 대해 작성하는 것이 아니라, 면접을 준비할 때 공부했던 것을 작성하는 시리즈입니다.
* 연계로 나올 수 있는 질문은 넘버링에 -N이 붙습니다.
* 면접에 대한 대답은 너무 길지 않고, 그 개념에 대해 확실히 알고 있는지만 말할 수 있으면 됩니다.
* 위와 같은 이유로 본문 내용은 그렇게 길게 적지 않고, 핵심만 짚어서 설명합니다.
* 특정 회사의 면접 질문 공유 요청은 하지 말아주세요.
* 붉은 글씨는 꼬리 질문이 나올 수 있다고 생각하는 키워드입니다.
멀티 프로세스
간단 정리
멀티 프로세스는 여러 개의 독립적인 프로세스를 생성하여 병렬적으로 실행하는 것.
장점
멀티 프로세스는 안정성과 보안성이 높으며, 오류에 대해 비교적 안전하다.
새 프로세스를 생성할 때 다른 프로세스가 영향을 받지 않으므로 확장성이 좋다.
단점
프로세스를 생성하기 위한 비용이 크다.
컨텍스트 스위칭에서 오버헤드가 크다.
각각의 공간이 독립되어 있기 때문에 프로세스 간 자원 공유가 힘들다. (통신이 힘들다.)
멀티 스레드
간단 정리
멀티 스레드는 하나의 프로세스 안에 여러 개의 스레드를 생성하여 병렬적으로 실행하는 것.
장점
프로세스에 비해 가볍기 때문에 비교적 생성 비용이 적다. (스택 공간만 가지므로)
컨텍스트 스위칭의 속도가 비교적 빠르다.
한 프로세스에서 공유하는 공간이 존재해 자원 공유가 효율적이며 편리하다.
단점
한 스레드에 문제가 발생하면 다른 스레드에 영향이 갈 수 있다. (전체 프로세스에 영향)
공유 자원에 여러 스레드가 동시에 접근하여 동기화 관련된 문제가 발생할 수 있다.
메모리 관리 및 자원 공유
멀티 프로세스
각 프로세스는 독자적인 주소 공간을 가져 하나의 프로세스에서 발생한 오류(예: 메모리 누수, 충돌)가 다른 프로세스에 영향을 주지 않는다.
운영체제가 프로세스마다 별도의 자원을 할당하여 관리하므로 보안 및 안정성 측면에서 유리하다.
프로세스 간 데이터 교환을 위해서는 IPC(Inter-Process-Communication) 메커니즘(예: 파이프, 소켓 등)을 사용해야 하며, 이는 추가 오버헤드를 발생시킨다.
멀티 스레드
하나의 프로세스 내에서 실행되기 때문에 모든 스레드가 동일한 주소 공간과 자원을 공유한다.
이로 인해 데이터 교환과 자원 접근을 빠르게 할 수 있다.
공유된 자원에 대한 동시 접근 시 경쟁 상태(race condition)나 데드락과 같은 동기화 문제가 발생할 수 있으므로, 뮤텍스, 세마포어, 스핀락 등의 동기화 기법이 필요하다.
생성 비용 및 컨텍스트 스위칭
멀티 프로세스
새로운 프로세스를 생성하는 것은 시스템 자원 할당, 메모리 초기화 등으로 인해 상대적으로 비용이 크다.
프로세스 간 컨텍스트 스위칭은 스레드 간 스위칭보다 무겁고 느리며, 캐시 플러시 등의 오버헤드가 발생할 수 있다.
멀티 스레드
스레드는 프로세스에 비해 생성 비용이 낮으며, 빠르게 생성되고 종료될 수 있다.
스레드 간 컨텍스트 스위칭은 동일한 주소 공간 내에서 이루어지므로 오버헤드가 적다.
안정성
멀티 프로세스
한 프로세스에서 예외나 오류가 발생해도 해당 프로세스에만 영향이 있으므로 전체 시스템의 안정성을 높일 수 있다.
프로세스 간 메모리가 격리되기 때문에 하나의 프로세스가 크래시 하더라도 다른 프로세스에는 영향을 미치지 않는다.
멀티 스레드
같은 주소 공간을 공유하기 때문에 하나의 스레드에서 심각한 문제가 발생한다면 전체 프로세스(모든 스레드)에 영향을 줄 수 있다.
동기화 문제나 경쟁 상태로 인한 버그는 재현하기 어렵고 디버깅이 굉장히 어려워진다.
통신 효율 및 설계 복잡도
멀티 프로세스
프로세스 간 데이터 교환은 별도의 통신 채널을 사용해야 한다.
메시지 큐, 공유 메모리, 파이프 등의 다양한 IPC 기법을 도입해야 한다.
이로 인해 설계 자체가 복잡해질 수 있다.
독립된 프로세스 간 통신은 불필요한 데이터 공유를 방지하여 보안성이 향상된다.
멀티 스레드
스레드 간에는 별도의 IPC 없이도 공유 메모리 상에서 직접 데이터 공유가 가능해 통신이 매우 빠르다.
자원에 접근할 때 반드시 동기화 처리를 해야 하며, 이로 인해 관련 문제에 대한 대비를 하기 위한 설계가 어려워질 수 있다.
서버나 클라이언트 사례(예시)
멀티 프로세스
서버
웹 서버(예: Apache의 prefork 모드)는 프로세스 간 격리를 통해 하나의 프로세스가 잘못되어도 전체 서버에 영향을 주지 않게 설계한다. 이와 같이 안정성과 보안이 중요한 시스템에서 주로 사용된다.
클라이언트
자원을 공유하고 빠른 데이터 처리를 하기 위해 보통 멀티 스레드를 사용함.
특히나 게임 클라이언트는 더더욱 찾아보기 힘들다.
멀티 스레드
서버
게임 서버나 고성능 네트워크 서버는 스레드 풀을 이용해 다수의 클라이언트 요청을 빠르게 처리한다.
이처럼 데이터 공유와 빠른 응답이 중요한 경우 사용한다.
클라이언트
렌더링, 사용자 입력, 네트워크 통신 등 다양한 작업을 동시에 수행하기 위해 멀티 스레드 방식을 사용
DirectX12는 또한 이 멀티 스레드 렌더링에 대해 강점을 가진다고 강조함.
각 기능별 스레드를 구분해 메인 스레드의 부하를 줄이고 사용자 경험을 향상시킨다.
(로딩 혹은 대기 스레드와 데이터 로드 스레드를 구분하여 데이터를 로드하는 중에 다른 상호작용 가능한 화면을 보여줌으로 사용자 경험 향상)
'CS > 면접질문 시리즈' 카테고리의 다른 글
| 가상함수와 가상함수 테이블은 무엇인가? (2) - 파생 질문 (0) | 2025.09.01 |
|---|---|
| 가상함수와 가상함수 테이블은 무엇인가? (1) (0) | 2025.09.01 |
| 클라이언트 개발자 면접 질문 시리즈(1-1) - 스레드와 프로세스의 차이 (0) | 2025.03.13 |
| C# - String Builder에 대해 알아보자 (0) | 2024.07.16 |
| 디자인 패턴 - 팩토리 패턴을 실제 게임 예시로 알아보자. (2) | 2024.07.14 |