• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go runtime.Gosched()的作用分析

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

untime.Gosched()用于让出CPU时间片。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。

看代码:

package main

 

import (

"fmt"

"runtime"

)

 

func say(s string) {

for i := 0; i < 2; i++ {

runtime.Gosched()

fmt.Println(s)

}

}

 

func main() {

go say("world")

say("hello")

}

 

输出结果:

hello

world

hello

注意结果:

1、先输出了hello,后输出了world.

2、hello输出了2个,world输出了1个(因为第2个hello输出完,主线程就退出了,第2个world没机会了)

把代码中的runtime.Gosched()注释掉,执行结果是:

hello

hello

因为say("hello")这句占用了时间,等它执行完,线程也结束了,say("world")就没有机会了。

这里同时可以看出,go中的goroutins并不是同时在运行。事实上,如果没有在代码中通过

runtime.GOMAXPROCS(n) 其中n是整数,

指定使用多核的话,goroutins都是在一个线程里的,它们之间通过不停的让出时间片轮流运行,达到类似同时运行的效果。

 

还需要学习一句话:

当一个goroutine发生阻塞,Go会自动地把与该goroutine处于同一系统线程的其他goroutines转移到另一个系统线程上去,以使这些goroutines不阻塞


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
8.1Go并发发布时间:2022-07-10
下一篇:
Python中的正则表达式教程 - Wanna_Go发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap