创建goroutine并管理其寿命步骤:
1.分配逻辑处理器给调度器使用
//分配一个逻辑处理器给调度器使用
runtime.GOMAXPROCS(1)
2.使用WaitGroup来作为一个计数信号量,可以用来记录并维护gororutine,如果WaitGroup的值大于0,wait方法就会阻塞
//wg用来等待程序完成
var wg sync.WaitGroup
//计数加二,表示要等待两个goroutine
wg.add(2)
go func(){
...
//在函数退出时调用Done来通知main函数工作已完成
defer wg.Done()
...
}()
go func(){
...
defer wg.Done()
...
}()
//等待goroutine结束
wg.Wait()
//注:创建goroutine的函数调用时可以传入参数,不过goroutine终止时无法获取函数的返回值
//runtime包的GOMAXPROCS函数允许程序更改调度器可以使用的逻辑处理器的数量
runtime.GOMAXPROCS(1)
//runtime.NumCPU()返回可以使用的物理处理器的数量
//给每个可用的核心分配一个可用的逻辑处理器
runtime.GOMAXPROCS(runtime.NumCPU())
//当前goroutine从当前线程退出,并放回到队列
runtime.Gosched()