goroutine类似于线程的概念,goroutine是由Go在运行时调度和管理,Go程序会智能的将任务分配给每个CPU。Go程序运行启动是从main包的main()函数中开始,在程序启动时,go程序会为每个main()函数创建一个默认的goroutine。
下面使用简单的例子为普通的函数创建goroutine。格式上只需要在关键字go后面加上函数名即可。
package main
import ("fmt" "time")
func running(){
var tick int
for {
tick++
fmt.Println("tick", tick)
//延迟一秒再循环
time.Sleep(time.Second)
}
}
func main(){
go running()
//接受输入命令
var input string
fmt.Scanln(&input)
以上代码实现的功能是不断的打印tick,running()函数无线循环来打印,main()函数则支持人工输入打印。以上示例一共创建了两个goroutine,running()函数一个,main()函数一个。
下面为匿名函数创建goroutine。
package main
import ("fmt" "time")
func main(){
go func () {
var tick int
for {
tick++
fmt.Println("tick", tick)
time.Sleep(time.Second)
}
}
var input string
fmt.Scanln(&input)
}
这里展示的代码实现的功能和上面的一样,不同点在于这里将running()函数从显示状态改成匿名状态。这里为匿名函数创建一个goroutine。
以上展示goroutine的并发能力。go程序还可以实现并行,只要通过runtime.GOMAXPROCS()函数设置CP数量就可以做到。
比如
runtime.GOMAXPROCS(逻辑CPU数量)
只要值大于一就可以实现多核并发执行,也就可以实现并行。