Contents
go routinego 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