반응형
# 고루틴이란?
- 경량화된 쓰레드(Thread)
일반적으로 OS 스레드 1개와 언어 쓰레드 1개를 사용한다. (1:1)
하지만 고언어는 OS 스레드 하나에 여러개의 고루틴을 사용한다. 즉 여러개의 스레드를 사용한다는 뜻이다.
# 특징
- 메모리를 조금 사용한다. 그래서 성능이 더 좋다.
- 스레드를 바꾸는 것보다 컨텍스트(context) 스위칭이 더 빠르다.
- 고언어는 내부에 있는 Go 스케줄러 관리 해준다. 그래서 고루틴이 메모리를 적게 사용하다가 메모리가 더 필요하면 Go 스케줄러가 메모리를 더 할당해 준다.
- main도 고루틴이다.
- 고루틴은 메인과 함께 시작하고 끝난다.
- 메인 루틴이 종료되면 프로그램도 종료된다 Ex) 메인루틴, A고루틴, B고루틴 3개가 돌고 있는데 메인루틴이 종료되면 다른 고루틴들도 바로 종료 된다.
- 각 고루틴은 개별적으로 동작한다
# 고루틴 기본 문법
go 함수
# 예시
func main() {
fmt.Println("Goroutine 시작")
go func() {
fmt.Println("Goroutine 진행 중")
}()
fmt.Println("Goroutine 끝")
}
# 예상값
Goroutine 시작
Goroutine 진행 중
Goroutine 끝
# 실제값
Goroutine 시작
Goroutine 끝
# 예상값과 실제값이 다른 이유
고루틴이 안 만들어진 것이 아니다.
고루틴에서 "Goroutine 진행 중" 출력하기 전에 "Goroutine 끝" 출력되면서 main함수의 고루틴이 끝났다. 그래서 "Goroutine 진행 중"이 출력이 되지 못했다.
메인 고루틴이 끝나면서 서브고루틴이 끝나게 된다.
메인 고루틴과 새로운 고루틴은 개별적으로 동작한다. 그래서 main은 고루틴이 끝났는지 안 끝났는지 모른다.
# 참조
https://github.com/YooGenie/go-study/issues/52
다음편! 문제점 해결방법!!
2022.10.10 - [Study/Go 언어] - [golang] 고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법
반응형
'Study > Go 언어' 카테고리의 다른 글
[golang] 고루틴 주의 사항 (2) | 2022.10.11 |
---|---|
[golang] 고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법 (0) | 2022.10.10 |
[golang] 채널(channel) blocking 해결 방법 (0) | 2022.10.07 |
[golang] 채널(channel)에서 주의할 점 (0) | 2022.10.06 |
[golang] 채널(channel) 기본 문법 (0) | 2022.10.05 |