goroutine:sync.WaitGroup 可以使主协程等待协程完成后执行
var wg sync.WaitGroup
func print_i(i int) {
defer wg.Done()
fmt.Println(i)
}
func main() {
for i := 0; i < 100; i++ {
wg.Add(1)
go print_i(i)
}
wg.Wait()
fmt.Println("done")
}
runtime
runtime.Gosched(),大概就是让出资源让别的协程执行
func main() {
go func(s string) {
for i := 0; i < 2; i++ {
fmt.Println(s)
}
}("world")
// 主协程
for i := 0; i < 2; i++ {
// 切一下,再次分配任务
runtime.Gosched()
fmt.Println("hello")
}
}
world
world
hello
hello
runtime.Goexit()
退出当前协程
func main() {
*go func() {
defer fmt.Println("A.defer")
func() {
defer fmt.Println("B.defer")
// 结束协程
runtime.Goexit()
defer fmt.Println("C.defer")
fmt.Println("B")
}()
fmt.Println("A")
}()
for {
}
}
B.defer
A.defer