# Go程/Gorouttine
Go 程(goroutine)是由 Go 运行时管理的轻量级线程。
写法为:
go f(x,y,z)
运行时,会启动一个新的 Go 程并执行
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")
}
// 输出结果
// 分别打印5次 hello 和 world,但由于操作系统的打印输出每次只能输出一个,因此看起来像是先后打印。但实际上两者应该是几乎同时打印的。
//world
//hello
//hello
//world
//world
//hello
//hello
//world
//world
//hello
# 访问冲突
由于协程运行在相同的内存地址中,因此当两个协程用到相同的变量时,有可能会出现访问问题。
func say( x,y,z int){
// ...
}
func main(){
go say(1,2,3)
}
在这段代码中,say函数运行在一个新的Go程中。但1,2,3这几个变量在主 Go 程中。如果想要在say中正常访问这些变量,需要保证这些访问是同步的。在GO中提供了 sync 包解决,但也有一个更常用的方式—— 信道(Channels)
← 异常/Panic 信道/Channels →