피드로 돌아가기
Dev.toBackend
원문 읽기
Semaphore 기반 Concurrency 제어를 통한 Thread Pool 설계 최적화
Sleeping Barber Problem
AI 요약
Context
한정된 리소스를 공유하는 다중 프로세스 간의 조정 문제로 인한 Race Condition 및 Deadlock 위험 존재. 단순한 대기열 구현 시 신호 누락으로 인한 Lost Wakeup과 특정 프로세스의 Starvation 발생 가능성 상존.
Technical Solution
- Customers, Barber, Mutex의 3종 Semaphore를 활용한 상호 배제 및 동기화 구조 설계
- Mutex를 통한 대기열 카운트 접근 제어로 원자성(Atomicity) 확보 및 Race Condition 방지
- Condition Variable의 원리를 이용한 Barber 스레드 블로킹 및 Customer 신호를 통한 Wakeup 매커니즘 구현
- Poison Pill 전략을 통한 작업 큐의 순차적 처리 및 안전한 Worker 스레드 종료 프로세스 구축
- Go-style Context의 Select 구문을 활용한 Polling 제거 및 비동기 Shutdown 시그널 처리 최적화
- Ada 언어의 Protected Object를 통한 런타임 수준의 불변성(Invariant) 보장 및 구조적 동기화 적용
실천 포인트
- Thread Pool 설계 시 Queue Capacity 설정으로 HTTP 503 등 요청 거절 전략 수립 여부 검토 - Worker 종료 시 Stop Flag 도입 시 Blocking Call의 Timeout 설정을 통한 CPU 사용량과 Latency 간 Trade-off 분석 - 분산 시스템의 Shutdown 프로세스 설계 시 Poison Pill 도입을 통한 잔여 작업의 완결성(Draining) 보장 여부 확인 - 동기화 프리미티브 선택 시 언어 차원의 First-class Semantic 지원 여부에 따른 설계 복잡도 평가