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
반응형

+ Recent posts