全球热资讯!Go语言入门13之runtime包案例讲解
目录
Runtime包GOMAXPROCS()Gosched()Goexit()举个栗子Runtime包
GOMAXPROCS()
用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述
Gosched()
用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行
(相关资料图)
Goexit()
用于立即中止当前goroutine的运行(中止所在协程),而并不影响其他goroutine。⭐注意!Goexit()在中止当前协程前,还是会运行当前goroutine还没有执行的defer语句,切记,不允许在主函数调用Goexit(),会导致panic异常
runtime调度器是非常有用的东西,关于runtime包几个方法:
Gosched:让当前线程让出cpu以让其他线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
NumCPU:返回当前系统的CPU核数量
GOMAXPROCS:设置最大的可同时使用的CPU核数
Goexit:退出当前goroutine(但是defer语句会照常执行)
NumGoroutine:返回真该执行和排队的任务总数
GOOS:目标操作系统
GOROOT:返回本机的GO路径举个栗子
// 定义两个函数,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! */
到此这篇关于Go语言入门13(runtime包)的文章就介绍到这了,更多相关Go runtime包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
下一篇:最后一页
- 边城战“疫”:夜晚七点的暂停键
- 风雪高原战“疫”长卷 寒潮下的西宁疫情防控观察
- 海口市1例治愈后的境外输入病例复阳 已转至定点医院隔离
- 四川新增本土确诊病例4例
- 黑龙江省新增新冠肺炎本土确诊病例6例
- 河南新增本土确诊病例18例 其中郑州市16例周口市2例
- 河北新增确诊病例8例 新增无症状感染者1例
- 寒潮持续发威!南方气温纷纷触底 强降雪中心转移至东北
-
雪后寒!今日北京晴天回归北风劲吹 最高气温5℃上下
中国天气网讯 今天(11月8日)北京晴天回归,但在风寒效应下,“冷”仍然是天气的主题。气温方面,今天北京最高气温在5℃左右,最低气温
-
黑龙江新增本土确诊病例6例 均在黑河市爱辉区
中新网11月8日电 据黑龙江省卫健委网站消息,2021年11月7日0-24时,黑龙江省新增新冠肺炎本土确诊病例6例(黑河市爱辉区6例),均为集中
X 关闭
X 关闭