码迷,mamicode.com
首页 > 其他好文 > 详细

runtime

时间:2018-09-11 00:57:04      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:pre   多核   for   ocs   技术   图片   png   协程   退出   

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

标签:pre   多核   for   ocs   技术   图片   png   协程   退出   

原文地址:https://www.cnblogs.com/traditional/p/9623587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!