백엔드 Backend/Golang
[GOLANG] 고루틴(GoRoutine)
dongburiii
2025. 4. 4. 16:53
728x90
반응형
Goroutine
- Go 런타임이 관리하는 가상(논리) 쓰레드
- go 키워드로 고루틴 실행 가능
- 비동기적으로 함수 루틴을 수행하며, 동시 동작 수행에 사용됨
- OS 스레드보다 훨씬 가볍고, 생성할 때 비용이 적음
- OS 스레드는 1mb의 메모리 스택, goroutine은 kb 단위 (동적 증가 가능)
- 기본적으로 CPU 1개를 시분할하여 사용
다중 처리
- Go는 기본적으로 CPU 개를 사용한다
- 다중 병렬 처리를 위해 CPU를 여러개 사용하기 위해선 GOMAXPROCS로 증가시킬 수 있다.
runtime.GOMAXPROCS(4) // CPU 4개 사용
익명함수 (go func)
- 익명 함수 go func() {}() 으로 비동기 실행 가능
func main() {
var wait sync.WaitGroup // Go 루틴 대기열 두개 생성
wait.Add(2)
go func (parameter string) {
defer wait.Done()
//
} ("parameterValue")
wait.Wait() // Go 루틴 끝날 때 까지 대기
}
Graceful Shutdown
- Go 언어에서 여러 고루틴을 운영할 때 Graceful Shutdown 로직이 필요한 이유는, Go 애플리케이션이 종료 신호를 받았을 때 하위 고루틴들이 메인 고루틴보다 먼저 종료될 가능성이 있기 때문
- 쉽게 말하면, 작업 지시서이다
Context
- 동시성을 관리
- 여러 goroutine에 값을 전달
- 취소 신호 전파
- 분산 시스템 / 서비스 간의 상호 작용에서 아용
context.Background
- 모든 context 의 기본이 되는 빈 context 를 반환
- 대부분의 context 는 이를 기반으로 생성
context.TODO()
- 아직 구현되지 않은 부분을 나타내는 context 를 반환
728x90
반응형