Programming/golang
go 루틴
구차니
2022. 9. 6. 12:48
go 루틴은 쓰레드로 작동시킨다.
go funcname() |
[링크 : http://golang.site/go/article/21-Go-루틴-goroutine]
왜.. 생소하지 -ㅁ-?
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") } |
[링크 : https://go.dev/tour/concurrency/1]
고루틴은 parent에 의해서 죽일수 없다고 하는데
[링크 : https://www.reddit.com/r/golang/comments/4kpv6x/why_a_parent_goroutine_doesnt_kill_its_child_and/]
그래서 channel을 이용해서 해당 채널을 close 하면 닫는 식으로 간접 제어 하기도 하는 듯
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup wg.Add(1) ch := make(chan string) go func() { for { channel, ok := <-ch if !ok { fmt.Println("Shut Down") defer wg.Done() return } fmt.Println(channel) } }() ch <- "Start" ch <- "Processing" ch <- "Finishing" close(ch) wg.Wait() } |
[링크 : https://www.golangprograms.com/how-to-kill-execution-of-goroutine.html]