Go - goroutine

choko's avatar
Jun 29, 2024
Go - goroutine
Contents
go routine
 

go routine

  • Golang이 사용하는 경량 쓰레드로, 비동기 적인 함수루틴 실행과 여러 코드를 동시에 실행하는데 사용된다.
    • go routine은 다음과 같은 특징을 가진다.
      • OS 쓰레드보다 적은 메모리 사용
      • OS 쓰레드의 생성/소거 비용에 비해 소모 비용이 저렴하다.
      • Context switching 비용도 더 저렴하다
      • → 이러한 이유로, Golang은 동시성 처리 능력이 뛰어난 프로그래밍 언어이다.
 
  • 사용법
    • go FUNCTION()
      • package main import ( "fmt" "time" ) func PrintNumbers() { for i := 1; i <= 10; i++ { time.Sleep(200 * time.Millisecond) fmt.Printf("%d", i) } } func main() { go PrintNumbers() time.Sleep(3 * time.Second) }
    • go func()
      • go func() { for { DepositAndWithdraw(account) } }()
    • 뮤텍스 적용
      • import ( "sync" ) var mutex sync.Mutex func DepositAndWithdraw(account *Account) { mutex.Lock() defer mutex.Unlock() /// }
      • sync.Mutex로 데드락 상태를 방지할 수 있다. 하지만
        • 뮤텍스의 사용으로 인한 과도한 lock으로, 성능 하락이 일어날 수 있다.
        • go routine을 완전 멈추게 하는 데드락 상태가 발생할 수 있다.
        는 문제점이 있다.
 

 
Share article

Tom의 TIL 정리방