runtime
Posted traditional
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了runtime相关的知识,希望对你有一定的参考价值。
runtime.Gosched(),让出时间片,让其他协程先执行
package main import ( "fmt" "runtime" ) func main(){ go func() { for i:=0;i<5;i++{ fmt.Println("go routine") } }() for j:=0;j<2;j++{ runtime.Gosched() //如果不加这句,那么在主协程执行完毕,子协程还没来得及执行,程序便结束了 fmt.Println("main routine") } /* go routine go routine go routine go routine go routine main routine main routine */ }
runtime.Goexit(),终止当前协程的执行
package main import ( "fmt" "time" ) func test(){ defer fmt.Println("ccc") return fmt.Println("ddd") } func main(){ go func() { fmt.Println("aaa") test() fmt.Println("bbb") }() time.Sleep(time.Second) /* aaa ccc bbb */ }
如果我将test中的return换成runtime.Goexit()
package main import ( "fmt" "runtime" "time" ) func test(){ defer fmt.Println("ccc") runtime.Goexit() fmt.Println("ddd") } func main(){ go func() { fmt.Println("aaa") test() fmt.Println("bbb") }() time.Sleep(time.Second) /* aaa ccc */ }
首先打印aaa,然后执行test(),打印ccc,当遇见runtime.Goexit(),表示所在的协程就退出了,所有bbb也不会打印了
runtime.GOMAXPROCS(),设置并行计算的CPU的核数
package main import ( "fmt" "runtime" ) func main(){ runtime.GOMAXPROCS(1)//表示使用单核 for { go func() { fmt.Print(1) }() fmt.Print(0) } }
package main import ( "fmt" "runtime" ) func main(){ runtime.GOMAXPROCS(4)//使用4核 for { go func() { fmt.Print(1) }() fmt.Print(0) } }
可以看到使用多核,时间片轮转变快了,交替更频繁了
以上是关于runtime的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C Runtime 文档翻译—与Runtime的相互作用
为啥在 Zapier 中使用此代码时会出现 Runtime.MarshalError?