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的相互作用

如何编译 dotnet/runtime 源代码

为啥在 Zapier 中使用此代码时会出现 Runtime.MarshalError?

如何编译 dotnet/runtime 源代码 #yyds干货盘点#

Go 运行时(runtime)

iOS开发:认识一下Runtime