Go语言 并发编程
01、创建goroutine
// 并行 是两个队列同时使用两台咖啡机 // 并发 是两个队列交替使用一台咖啡机 package main import ( "fmt" "time" ) func newTask() { for { fmt.Println("this is a newTask") time.Sleep(time.Second) // 延时1s } } func main() { go newTask() // 新建一个协程,新建一个任务 for { fmt.Println("this is a main goroutine") time.Sleep(time.Second) // 延时1s } }
02、主goroutine先退出
package main import ( "fmt" "time" ) // 主协程退出了,其它子协程也要跟着退出 func main() { go func() { i := 0 for { i++ fmt.Println("子协程 i =", i) time.Sleep(time.Second) } }() i := 0 for { i++ fmt.Println("main i =", i) time.Sleep(time.Second) if i == 2 { break } } }
03、主协程先退出导致子协程没有来得及调用
package main import ( "fmt" "time" ) func main() { go func() { i := 0 for { i++ fmt.Println("子协程 i =", i) time.Sleep(time.Second) } }() }