CS 기초 · 심화
기존 스레드 기반의 동시성 모델(shared-memory concurrency)과 비동기 프로그래밍 모델(예: Actor Model, CSP)을 비교하고, 각각의 모델이 특정 유형의 문제(I/O 바운드 vs. CPU 바운드)에 어떻게 더 적합한지, 그리고 발생할 수 있는 트레이드오프(trade-off)는 무엇인지 설명해 주십시오.
힌트 · 스레드 기반 모델은 공유 메모리를 통해 상태를 공유하며, 비동기 모델은 메시지 패싱을 통해 상태를 격리합니다. I/O 바운드 작업에는 비동기 모델이 컨텍스트 스위칭 오버헤드를 줄여 효율적이며, CPU 바운드 작업에는 스레드 기반 모델이 병렬 처리에 유리할 수 있습니다.
공유 메모리Actor 모델I/O 바운드CPU 바운드컨텍스트 스위칭
모범답안
기존 스레드 기반 동시성은 공유 메모리를 통해 데이터를 공유하며, 여러 스레드가 동시에 같은 메모리에 접근할 때 동기화 문제가 발생합니다. 이는 CPU 바운드 작업에서 병렬 처리에 유리하지만, 컨텍스트 스위칭 오버헤드가 커질 수 있습니다.
반면 Actor 모델이나 CSP 같은 비동기 프로그래밍은 메시지 패싱을 통해 상태를 격리합니다. 각 액터나 고루틴은 독립적인 상태를 가지며, 통신은 명시적인 메시지 전달로 이루어집니다. 이는 I/O 바운드 작업에서 효율적입니다. I/O 대기 중 스레드가 차단되지 않고 다른 작업을 수행할 수 있어 컨텍스트 스위칭 오버헤드를 줄이고 시스템 자원을 더 잘 활용할 수 있습니다.
트레이드오프로는 스레드 기반 모델은 구현이 직관적일 수 있으나 데드락, 레이스 컨디션 같은 복잡한 동기화 이슈에 취약합니다. 비동기 모델은 상태 격리로 안전성을 높이지만, 메시지 전달 방식의 설계와 디버깅이 더 복잡할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 동시성 / 멀티스레딩 면접 질문
- 분산 시스템 또는 복잡한 마이크로서비스 환경에서 발생할 수 있는 교착 상태(deadlock)를 예방하거나 탐지하기 위한 고급 전략에는 어떤 것들이 있으며, 각 전략의 구현 복잡도와 실제 적용 시의 고려사항은 무엇인지 설명해 주십시오.
- Java의 synchronized 키워드와 ReentrantLock 클래스의 내부 구현 메커니즘을 비교하고, 특히 ReentrantLock이 synchronized보다 제공하는 유연성과 고급 기능(예: 조건 변수, 공정성)이 어떻게 구현되는지 AQS(AbstractQueuedSynchronizer)를 중심으로 설명해 주십시오.
- 멀티코어 환경에서 동시성 애플리케이션의 성능을 논할 때, 확장성(scalability)과 처리량(throughput)은 어떤 관계를 가지며, 특정 워크로드에서 이 두 가지 지표를 최대화하기 위한 동시성 설계 전략은 어떻게 달라져야 하는지 구체적인 사례를 들어 설명해 주십시오.