即时:Go语言中Goroutine的设置方式
一、 通过runtime包进行多核设置
1.NumCPU()获取当前系统的cpu核数
2.GOMAXPROCS设置当前程序运行时占用的cpu核数
版本1.6之前默认是使用1个核,而之后是全部使用。
(资料图片)
好玩的程序:
func doSomething() { var i int for { i++ } } func main() { cpu := runtime.NumCPU() fmt.Println("本机cpu核数:", cpu) fmt.Println("输入模拟的cpu数:") reader := bufio.NewReader(os.Stdin) buf, _ := reader.ReadBytes("\n") cmdStr := (string)(buf) num, err := strconv.Atoi(strings.Trim(cmdStr, "\r\n")) if err != nil || num > cpu || num <= 0 { fmt.Println("输入的数字不正确 err:{0}", err) return } //设置核数 runtime.GOMAXPROCS(num) for i := 0; i < 10; i++ { //做个死循环 go doSomething() } fmt.Println("程序已经开始执行") time.Sleep(time.Second * 30) for j := 5; j > 0; j-- { fmt.Printf("程序倒计时退出: %ds...\n", j) time.Sleep(time.Second) } fmt.Printf("程序退出") }
我的电脑是8核的,分别运行1 2 4 8,看下cpu的使用率:
图一 未开始运行
图二 运行1个cpu
图三 运行2个cpu
图四 运行4个cpu
图五 运行8个cpu
二、Goroutine的调度原理复习
之前的记录 Go语言中并发的工作原理
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
X 关闭
X 关闭
- 1转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 2充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 3好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 4名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 5亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 6京东绿色建材线上平台上线 新增用户70%来自下沉市场
- 7网红淘品牌“七格格”chuu在北京又开一家店 潮人新宠chuu能红多久
- 8市场竞争加剧,有车企因经营不善出现破产、退网、退市
- 9北京市市场监管局为企业纾困减负保护经济韧性
- 10市场监管总局发布限制商品过度包装标准和第1号修改单