runtime 调度器是个非常有用的东西,关于 runtime 包几个方法:
- Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
- NumCPU:返回当前系统的 CPU 核数量
- GOMAXPROCS:设置最大的可同时使用的 CPU 核数
- Goexit:退出当前 goroutine(但是defer语句会照常执行)
- NumGoroutine:返回正在执行和排队的任务总数
- GOOS:目标操作系统
NumCPU
package main import ( "fmt" "runtime" ) func main() { fmt.Println("cpus:", runtime.NumCPU()) fmt.Println("goroot:", runtime.GOROOT()) fmt.Println("archive:", runtime.GOOS) }
运行结果:
GOMAXPROCS
Golang 默认所有任务都运行在一个 cpu 核里,如果要在 goroutine 中使用多核,可以使用 runtime.GOMAXPROCS 函数修改,当参数小于 1 时使用默认值。
package main import ( "fmt" "runtime" ) func init() { runtime.GOMAXPROCS(1) } func main() { // 任务逻辑... }
Gosched
这个函数的作用是让当前 goroutine 让出 CPU,当一个 goroutine 发生阻塞,Go 会自动地把与该 goroutine 处于同一系统线程的其他 goroutine 转移到另一个系统线程上去,以使这些 goroutine 不阻塞
package main import ( "fmt" "runtime" ) func init() { runtime.GOMAXPROCS(1) //使用单核 } func main() { exit := make(chan int) go func() { defer close(exit) go func() { fmt.Println("b") }() }() for i := 0; i < 4; i++ { fmt.Println("a:", i) if i == 1 { runtime.Gosched() //切换任务 } } <-exit }
结果:
使用多核测试:
package main import ( "fmt" "runtime" ) func init() { runtime.GOMAXPROCS(4) //使用多核 } func main() { exit := make(chan int) go func() { defer close(exit) go func() { fmt.Println("b") }() }() for i := 0; i < 4; i++ { fmt.Println("a:", i) if i == 1 { runtime.Gosched() //切换任务 } } <-exit }
结果:
根据你机器来设定运行时的核数,但是运行结果不一定与上面相同,或者在 main 函数的最后加上 select{} 让程序阻塞,则结果如下:
多核比较适合那种 CPU 密集型程序,如果是 IO 密集型使用多核会增加 CPU 切换的成本。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
Golang,runtime
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“Golang中runtime的使用详解”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年05月14日
2024年05月14日
- 野马奇迹 The Long Game
- 宵宫角色攻略,宵宫角色定位及抽取建议
- 三国谋定天下辎重怎么获得 游戏辎重获得方法分享
- 哈迪斯2新手图文攻略 哈迪斯2物品解锁攻略
- 哈迪斯2新手入门攻略 黑帝斯2图文攻略
- 《哈迪斯2》渊狱魔兽boss战攻略
- 《非生物因素》废银获得方法
- 《鸡械绿洲》特色玩法介绍
- 雨果-发烧典藏雨果精选一UPM-AGCD金碟-低速原抓WAV+CUE
- 群星-永远的红楼梦2021(88.2kHz24bit)FLAC
- 发烧名盘1988-恩雅-《浮水臃[WAV+CUE]
- 外国人的新潮流:厕纸塞进冰箱里 用来除臭
- 微软前员工:XGP可持续发展的机会是纳入GTA6等大作
- 5000一晚的酒店薅走35瓶洗发水回本 当事人发声
- 五条人.2021-昨夜我又梦见自己去流浪(LIVE专辑)【摩登天空】【WAV+CUE】