Runtime包
GOMAXPROCS()
用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述
Gosched()
用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行
Goexit()
用于立即中止当前goroutine的运行(中止所在协程),而并不影响其他goroutine。⭐注意!Goexit()在中止当前协程前,还是会运行当前goroutine还没有执行的defer语句,切记,不允许在主函数调用Goexit(),会导致panic异常
举个栗子
- // 定义两个函数,Test01和Test02
- // Test02在Test01运行结束之后运行
- // 并且Test02在i = 3的时候结束运行
- //Test01
- func Test01(wg *sync.WaitGroup) {
- defer func() {
- fmt.Println("Test01结束!")
- wg.Done()
- }()
- fmt.Println("协程01循环输出:")
- for i := 0; i < 5; i++ {
- fmt.Println("协程01 -", i)
- }
- }
- // Test02
- func Test02(wg *sync.WaitGroup) {
- defer func() {
- fmt.Println("Test02结束!")
- wg.Done()
- }()
- // 等待Test01运行结束
- runtime.Gosched()
- fmt.Println("协程02循环输出:")
- for i := 0; i < 5; i++ {
- if i == 3 {
- fmt.Println("i = 3 退出!")
- // 当i = 3时执行defer里的语句然后退出
- runtime.Goexit()
- }
- fmt.Println("协程02 -", i)
- }
- }
- // main函数调用
- func main() {
- var wg sync.WaitGroup
- wg.Add(2)
- go Test01(&wg)
- go Test02(&wg)
- wg.Wait()
- fmt.Println("This is main function!")
- }
- /*输出:
- 协程01循环输出:
- 协程01 - 0
- 协程01 - 1
- 协程01 - 2
- 协程01 - 3
- 协程01 - 4
- Test01结束!
- 协程02循环输出:
- 协程02 - 0
- 协程02 - 1
- 协程02 - 2
- i = 3 退出!
- Test02结束!
- This is main function!
- */
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |