内容简介:以下是官方的定义:这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。请看下面这个例子
以下是官方的定义:
// Gosched yields the processor, allowing other goroutines to run. It does not // suspend the current goroutine, so execution resumes automatically. func Gosched() { mcall(gosched_m) }
这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。
请看下面这个例子
package main import ( "fmt" //"runtime" ) func say(s string) { for i := 0; i < 2; i++ { //runtime.Gosched() fmt.Println(s, i) } } func main() { go say("world") say("hello") } //执行输出: //hello 0 //hello 1
---------取消注释runtime.Gosched()---------
package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i < 2; i++ { runtime.Gosched() fmt.Println(s, i) } } func main() { go say("world") say("hello") } //执行输出: //hello 0 //world 0 //hello 1
可以看到使用runtime.Gosched()后,先输出"hello 0",再输出"world 0",再输出"hello 1",最后一个"world 1"没有机会输出线程就结束了。
再看下面这个例子:
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") } //执行输出: //Haha
---------使用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() fmt.Println("Haha") } //执行输出:(每次结果不一定,但"Haha"一定输出且在最后) //6 //3 //7 //1 //8 //9 //4 //0 //2 //5 //Haha
分析:默认情况goroutins都是在一个线程里执行的,多个goroutins之间轮流执行,当一个goroutine发生阻塞,Go会自动地把与该goroutine处于线程的其他goroutines转移到另一个线程上去,以使这些goroutines不阻塞。 通过上面的结果可以看出,主线程执行完毕之后程序就退出了。 最后,如果代码中通过 runtime.GOMAXPROCS(n) 其中n是整数,指定使用多核的话,多个goroutines之间就可以实现真正的并行,结果就会上面的有所不同。
以上所述就是小编给大家介绍的《Golang runtime.Gosched()函数浅析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JS中的回调函数实例浅析
- C++ 虚函数和虚继承浅析
- VUE源码浅析(一.VUE构造函数)
- 深入浅析Orcale的nvl函数和SQL Server的isnull函数
- 浅析“远程对象调用”
- 浅析“远程对象调用”
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
第二曲线:跨越“S型曲线”的二次增长
[英]查尔斯·汉迪(Charles Handy) / 苗青 / 机械工业出版社 / 2017-6 / 49.00
S型曲线是每个组织和企业在预测未来时一定会参考的工具,一切事物的发展都逃不开S型曲线(“第一曲线”)。 然而,从公司组织、企业治理、市场的变化,到个人职业发展、社会人际关系以及未来的教育与社会价值,多维度地探讨这个世界需要重新以不同的角度来思考问题,不能够总是停留在“第一曲线”的世界。 如果组织和企业能在第一曲线到达巅峰之前,找到带领企业二次腾飞的“第二曲线”,并且第二曲线必须在第一曲......一起来看看 《第二曲线:跨越“S型曲线”的二次增长》 这本书的介绍吧!