gosched
Go语言runtime.Gosched()函数浅析
这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。
请看下面这个例子(show.go):
package main
import (
"fmt"
)
func showNumber (i int) {
fmt.Println(i)
}
func main() {
for i := 0; i < 10; i++ {
go showNumber(i)
}
fmt.Println("Haha")
}
执行结果如下:
[root@Fedora goEx]# go build show.go
[root@Fedora goEx]# ./show
Haha
没有打印出数字,可以看到goroutine没有获得机会运行。
修改代码:在main函数中加上runtime.Gosched():
package main
import (
"fmt"
"runtime"
)
func showNumber (i int) {
fmt.Println(i)
}
func main() {
for i := 0; i < 10; i++ {
go showNumber(i)
}
runtime.Gosched() //GoSched虽然让出cpu使用权,但是依然会被调度,在执行很长一段时间后有机会刚好获得cpu使用权,不一定等到所有其他go程执行完了才执行,它出让cpu的量级比sleep小的多,因为cpu的调度是随机的
fmt.Println("Haha")
}
编译运行:
[root@Fedora goEx]# go build show.go
[root@Fedora goEx]# ./show
0
1
2
3
4
5
6
7
8
9
Haha
可以看到goroutine获得了运行机会,打印出了数字。
gosched的更多相关文章
- go runtime.Gosched() 和 time.Sleep() 做协程切换
网上看到个问题: package main import ( "fmt" "time" ) func say(s string) { ; i < ; i+ ...
- Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS
转自:https://www.cnblogs.com/wt645631686/p/9656046.html runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权 ...
- go runtime.Gosched()的作用分析
untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑. 看代码: package main ...
- runtime.Gosched()的作用分析
untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑 测试代码: package main ...
- go语言之进阶篇runtime包中 Gosched Goexit GOMAXPROCS的使用
一.runtime包 1.Gosched的使用 runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢 ...
- [GO]runtime包及gosched的使用
Gosched:让出CPU时间片 Goexit:退出当前的协程 GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了...) package main import ( "fmt&qu ...
- 浅析runtime包中的三个方法Gosched、Goexit、GOMAXPROCS
Gosched 暂停当前goroutine,使其他goroutine先行运算.只是暂停,不是挂起,当时间片轮转到该协程时,Gosched()后面的操作将自动恢复 未使用Gosched的代码 packa ...
- Golang中的Gosched、Goexit、GOMAXPROCS
Golang进程权限调度包runtime三大函数Gosched,Goexit,GOMaXPROCS runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权限,调度 ...
- GO语言之channel
前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...
随机推荐
- 【C++札记】多态
C++中多态是面向对象设计思想的重要特性,同名具有不同功能函数,该函数调用过程执行不同的功能.多态的原理是通过一张虚函数表(Virtual Table)实现的.动多态会牺牲一些空间和效率来最终实现动态 ...
- 如何解决visual studio2017 install 下载安装极慢的问题
问题: visual studio 2017 下载安装速度慢,只有6.70kb/s.其他版本估计也有这个问题. 解决方案: 进入目录:C:\Windows\System32\drivers\etc 右 ...
- Verilog的各种坑
Verilog语言和软件语言不一样,有些时候理所当然的编写,也没有报语法错误,可是功能就是不对.唉,把遇到的坑都记在本篇博客吧. 1. initial begin...end里面不能有always,如 ...
- InnoDB的MVCC实现原理
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的. 这两个列,一个保存了行的创建时间,一个保存了行的过期时间(删除时间).当然存储的并不是实际时间,而是系统版本号(sytem ve ...
- redis HyperLogLog的使用
一.概念1.redis在2.8.9版本添加了HyperLogLog结构.2.redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大 ...
- Linux中etc目录详解大全总汇详解
/etc etc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思. 至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(Linu ...
- python3基础之“小练习(3)”
(二十四)将字符串"A screaming comes across the sky."中所有的"s"字符替换为美元符号. # a="A scream ...
- vue中如何判断checkbox是否选中
console.log(event.target.checked) 例:
- javasript简单实现文字的展开收起(无动画)
今天在工作遇到展开和收起的需求,在网上找了很多方法,今天来写一下我觉得比较简单的方法 在项目中需要达到如图这种效果 首先想的是使用overflow简单且粗暴,在需要展开的的文字定义样式 { overf ...
- adb server is out of date. killing... ADB server didn't ACK * failed to start daemon *……
问题 使用 adb 命令的时候报错如下: adb server is out of date. killing... ADB server didn't ACK * failed to start d ...