这篇“Go语言runtime包怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言runtime包怎么使用”文章吧。
用来设置可以并行计算的CPU核数最大值,并返回之前的值
用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行
用于立即中止当前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语言runtime包怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。