1 简介
在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?
Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。
在Go语言编程中你不需要去自己写进程、线程、协程,你的技能包里只有一个技能–goroutine,当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数就可以了。
2 启动单个goroutine
func Add(x, y int) {
z := x + y
fmt.Println(z)
}
func main() {
go Add(1, 1) // 开启go程让这个函数并发执行
for {
fmt.Println("...")
}
}
3 注意事项
- 主go程退出了, 其它go程也会退出
- 父go程(非主go程)退出了, 子go程不会退出 ```go package main
import ( “fmt” “time” )
func main() { // 合起来写 go func() { i := 0 for { i++ fmt.Printf(“new goroutine: i = %d\n”, i) time.Sleep(time.Second) } }() i := 0 for { i++ fmt.Printf(“main goroutine: i = %d\n”, i) time.Sleep(time.Second) if i == 2 { break } } }