피드로 돌아가기
Dev.toBackend
원문 읽기
2KB Goroutines 기반 M:N 스케줄링을 통한 고효율 병렬 처리 구현
Goroutines vs. Promises: Why Go and JavaScript Look at Concurrency Completely Differently
AI 요약
Context
전통적인 OS Thread 기반 동시성 제어의 높은 오버헤드와 복잡한 Lock 관리 문제를 해결해야 하는 상황. 단일 스레드 기반 Event Loop 모델과 멀티 스레드 기반 CSP 모델의 설계 철학 차이에 따른 아키텍처 선택 필요성 대두.
Technical Solution
- CSP 모델 기반의 '공유 메모리 대신 통신을 통한 메모리 공유' 철학을 채택하여 데이터 경쟁 최소화
- 2KB 수준의 초경량 Stack을 가진 Goroutine을 도입하여 수십만 개의 동시 작업 수행 가능 구조 설계
- GMP(Goroutine-Machine-Processor) 모델 기반 M:N 스케줄러를 통해 OS Thread 효율 극대화
- Work-stealing 알고리즘 적용으로 블로킹 작업 발생 시 활성 Goroutine을 타 OS Thread로 즉시 이동시켜 CPU 유휴 시간 제거
- Unbuffered Channel을 활용한 동기화 지점 설정으로 명시적 Lock 없이도 안전한 데이터 교환 구현
실천 포인트
- CPU 코어 수를 최대한 활용해야 하는 고성능 마이크로서비스 설계 시 Go의 GMP 모델 검토 - 데이터 경쟁 방지를 위해 Mutex 대신 Channel 기반의 통신 구조 우선 적용 - 단순 CRUD 중심의 I/O 바운드 서비스인 경우 단일 스레드 기반 비동기 모델의 단순성 활용