博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go -- runtime.Gosched()的作用分析
阅读量:7018 次
发布时间:2019-06-28

本文共 747 字,大约阅读时间需要 2 分钟。

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

看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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不阻塞.

转载地址:http://dfzxl.baihongyu.com/

你可能感兴趣的文章
Linux中基于hadoop安装hive(CentOS7+hadoop2.8.0+hive2.1.1)
查看>>
线程的概念
查看>>
Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化
查看>>
对actuator的管理端点进行ip白名单限制(springBoot添加filter)
查看>>
异步模式
查看>>
MongoDB and GUI 管理界面
查看>>
sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法
查看>>
获取Android APK JNI库
查看>>
linux系统卡解决方案
查看>>
窗口管理器 Openbox 入门指南
查看>>
Web-Fontmin -- 在线提取你需要的字体
查看>>
Java并发编程:Callable、Future和FutureTask
查看>>
Docker-Compose一键部署Ningx+Asp.net core站点+Redis
查看>>
四说大数据时代“神话”:从大数据到深数据
查看>>
25个经典的Spring面试问答
查看>>
使用阿里云Serverless函数计算实现HTTP健康检查+故障短信通知 ...
查看>>
Mysqlbinlog的一些操作和用法
查看>>
Oracle数据库数据类型
查看>>
MP实战系列(三)之实体类讲解
查看>>
12.2、python内置函数—format
查看>>