一、并发概念
-
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
-
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
-
类似java的多线程
1.1、并发与并行
- 并发:
- 两队人排队接咖啡,两队切换。
- 并行:
- 两个咖啡机,两队人同时接咖啡。
二、协程Goroutines
-
Go 允许使用 go 语句开启一个新的运行期线程, 即 goroutine,以一个不同的、新创建的 goroutine 来执行一个函数。
-
同一个程序中的所有 goroutine 共享同一个地址空间。
-
每个goroutine可以理解为一个线程
-
每个go程序至少都有一个Goroutine
- 主Goroutine(在运行进程时自动创建)
- 以及程序中其他Goroutine。
goroutine 语法格式
go 函数名( 参数列表 )
举例
go f(x, y, z)
2.1、举例
package main
import (
"fmt"
)
func say(s string) {
for i := 0; i < 5; i++ {
fmt.Println(s, i)
}
}
//main的Goroutine
func main() {
//开启一个新的Goroutine
go say("a:")
say("b:")
}
输出
b: 1
a: 0
a: 1
a: 2
b: 2
b: 3
a: 3
a: 4
b: 4
执行以上代码,你会看到输出的 a 和 b 是没有固定先后顺序。因为它们是两个 goroutine 在执行