Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2138字,纯文字阅读大概需要4分钟。
内容图文
![Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS](/upload/InfoBanner/zyjiaocheng/974/c762b4468cd140b8a627bb5d6236c1a4.jpg)
转自:https://www.cnblogs.com/wt645631686/p/9656046.html
runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其它等待的任务运行,并在下次某个时候从该位置恢复执行。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。
runtime.Goexit(),调用此函数会立即使当前的goroutine的运行终止(终止协程),而其它的goroutine并不会受此影响。runtime.Goexit在终止当前goroutine前会先执行此goroutine的还未执行的defer语句。请注意千万别在主函数调用runtime.Goexit,因为会引发panic。
runtime.GOMAXPROCS(),用来设置可以并行计算的CPU核数最大值,并返回之前的值。
默认此函数的值与CPU逻辑个数相同,即有多少个goroutine并发执行,当然可以设置它,它的取值是1~256。最好在主函数在开始前设置它,因为设置它会停止当前程序的运行。
GO默认是使用一个CPU核的,除非设置runtime.GOMAXPROCS
那么在多核环境下,什么情况下设置runtime.GOMAXPROCS会比较好的提高速度呢?
适合于CPU密集型、并行度比较高的情景。如果是IO密集型,CPU之间的切换也会带来性能的损失。
Gosched()代码案例
①:没有使用Gosched函数
package main import ( "fmt" ) func main() { go func() { //子协程 //没来的及执行主进程结束 for i := 0; i < 5; i++ { fmt.Println("go") } }() for i := 0; i < 2; i++ { //默认先执行主进程主进程执行完毕 fmt.Println("hello") } }
hello hello
②:使用Gosched函数
package main import ( "fmt" "runtime" ) func main() { go func() { //让子协程先执行 for i := 0; i < 5; i++ { fmt.Println("go") } }() for i := 0; i < 2; i++ { //让出时间片,先让别的协议执行,它执行完,再回来执行此协程 runtime.Gosched() fmt.Println("hello") } }
go go go go go hello hello
Goexit()代码案例
package main import ( "fmt" "runtime" ) func test() { defer fmt.Println("ccccccccccccc") //return //终止此函数 runtime.Goexit() //终止所在的协程 fmt.Println("dddddddddddddddddddddd") } func main() { //创建新建的协程 go func() { fmt.Println("aaaaaaaaaaaaaaaaaa") //调用了别的函数 test() fmt.Println("bbbbbbbbbbbbbbbbbbb") }() //别忘了() //特地写一个死循环,目的不让主协程结束 for { } }
aaaaaaaaaaaaaaaaaa ccccccccccccc
GOMAXPROCS()代码案例
package main import ( "fmt" "runtime" ) func main() { //n := runtime.GOMAXPROCS(1) //指定以1核运算 n := runtime.GOMAXPROCS(4) //指定以4核运算 fmt.Println("n = ", n) for { go fmt.Print(1) fmt.Print(0) } }
内容总结
以上是互联网集市为您收集整理的Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS全部内容,希望文章能够帮你解决Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。