并发:一箭多发
并行:同一时刻一起执行(齐头并进)
例子:
package main
import (
"fmt"
"sync"
)
// goroutine 多任务操作
var wg sync.WaitGroup // 声明一个全局的 wg 计数器对象[上下文管理器] (WaitGroup 结构体类型)
func fun1(i int) {
defer wg.Done() // 延迟调用,当次函数将要执行完毕时调用
fmt.Println(i)
}
func main() {
for i := 0; i < 100; i++{
// 每次循环开启一个新的线程执行一个匿名函数
wg.Add(1)
//go func(i int){ // 匿名函数
// defer wg.Done() // 延迟调用,当次函数将要执行完毕时调用
// fmt.Println(i)
//}(i)
go fun1(i)
//wg.Done()
}
wg.Wait() // 在此阻塞,等待所有的子线程都执行完毕,再结束程序的主线程
}
goroutine之GMP调度模型
G => Goroutine
M => Machine (映射操作系统内核线程的封装)
p => Processor(管理者)
有疑问加站长微信联系(非本文作者)