관리 메뉴

bright jazz music

GO - Goroutines 고루틴 기본 본문

Language/Go

GO - Goroutines 고루틴 기본

bright jazz music 2021. 2. 19. 23:57
package main

import (
	"fmt"
	"time"
)

// Goroutines 은 기본적으로 다른 함수와 동시에 실행시키는 함수이다.
//고루틴은 메인함수가 종료되면 끝난다.
func main() {
	go sexyCount("hojun") //go를 넣어줌으로써 고루틴을 만든다. 호준은 오케아노스와 동시처리된다.
	sexyCount("oceanus")
    
	//만약 sexyCount("oceanus")에도 go를 붙이면 프로그램은 종료된다.
	// 메인 함수가 작업을 마쳤기 때문이다.
	//고루틴은 프로그램이 작동하는 동안만 유효한 것이다. 즉, 메인함수가 작동하는 동안만
	//이 경우 메인함수는 첫 번째 고루틴을 실행하고 두 번째 고루틴을 실행한다.
	//그러면 남아 있는 작업이 없기 때문에 끝이 나버린다.
	//고루틴의 실행을 기다려주지 않는 것이다.
	//그래서 메인함수가 끝나면 모든 고루틴도 끝이 나는 것이다.
	//sexyCount("hojun")를 고루틴으로 만들었을 때 실행되었던 것은
	//메인 함수가 실행해 1초씩 걸리는 oceanus를 카운팅 하고 있기 때문이다.
	//만약 oceanus도 고루틴으로 만들고 그 밑에 time.Sleep(time.Second *5)라는
	//코드를 붙인다면 고루틴은 5초간은 살아 있을 것이다.
	// 5초가 지나면 메인함수는 종료될 것이고,
	//"is sexy"는 0에서 4까지밖에 세지 못했을 것이다.

}

func sexyCount(person string) {
	for i := 0; i < 10; i++ {
		fmt.Println(person, "is sexy", i)
		time.Sleep(time.Second)
	}
}
Comments