프로그래밍 언어/GO
Go routine이 무엇일까?
KYBee
2022. 10. 23. 18:06
프로세스, 스레드, Go routine
- 프로그램 : 프로세스의 명령어와 사용자 데이터를 초기화하는데 사용할 명령어와 데이터를 담은 파일
- 프로세스 : 명령어, 사용자 데이터, 시스템 영역, 실행 과정에 수집한 다양한 종류의 리소스로 구성된 독립적인 실행 단위
- 스레드 : 프로그램이나 프로세스보다 좀 더 가볍고 작은 실행 단위. 프로세스에 의해 생성되며 독립적인 제어 흐름과 스택을 가짐
- Go routine : Go 프로그램에서 동시에 실행할 수 있는 최소 단위.
- OS가 아닌 프로그램에서 Time-Sharing이 이루어짐
- 프로세스나 스레드를 OS에 요청하지 않고, 자체적으로 해결함. 프로세스, 스레드의 Context Switching 보다 비용적으로 우수함
- 프로세스나 스레드에 종속되지 않으므로, 1개의 스레드에서 1개 이상의 Go routine이 Time-Sharing되어 처리될 수 있다.
Go routine 사용 예시
Go routine을 사용하기 위해서는 go 키워드를 실행하려는 함수 앞에 적어주면 된다.
Go routine을 사용하지 않은 경우 : 순차적으로 실행된다.
package main
import "fmt"
func f1() {
for i := 0; i < 5; i++ {
fmt.Println("f1 실행 중")
}
}
func f2() {
for i := 0; i < 5; i++ {
fmt.Println("f2 실행 중")
}
}
func main() {
fmt.Println("starting")
f1()
f2()
fmt.Println("end")
}

Go routine을 사용한 경우 : 동시에 실행된다.
package main
import (
"fmt"
"time"
)
func f1() {
for i := 0; i < 5; i++ {
fmt.Println("f1 실행 중")
}
}
func f2() {
for i := 0; i < 5; i++ {
fmt.Println("f2 실행 중")
}
}
func main() {
fmt.Println("starting")
go f1()
go f2()
time.Sleep(5 * time.Second)
fmt.Println("end")
}
