您的位置 首页 golang

Golang并发编程,2、Gosched的使用,礼让子协程

goroutine是Go并行设计的核心,作为Go中最基本的执行单元,goroutine比thread更易用、更高效、更轻便,消耗内存相比较线程更小。

使用goroutine的方法是:在函数调用前使用关键字go,创建1个并发任务单元,也就创建了1个并发任务。

什么时候需要使用goroutine?

1、业务逻辑需要并发

2、性能优化需要并发

之前我们练习了 ,里面我们用到了select {}语句,让程序保持阻塞状态,不然程序可能发生以下情况:

没有select{}执行结果

可以看到,执行后,没有按照预想输出内容。

select添加上后,就保持阻塞状态,就可以按照要求持续输出,并且程序将不再退出。

添加select{}执行结果

有一种情况是优先让子协程执行,然后让主协程顺序执行后退出,这个时候,我们可以考虑使用runtime.Gosched()。

runtime.Gosched() 的作用是:当前 goroutine 让出 CPU,其它的 goroutine 执行。

同时,当前的 goroutine 也会在未来的某个时间点运行。

代码如下:

 package main

import (
   "fmt"
   "runtime"
)

func Task1() {
   for i := 0; i < 10; i++ {
      fmt.Printf("我正在跑步。。。%v\n",i)
   }

}
func Task2() {
   for i := 0; i < 10; i++ {
      fmt.Printf("我正在听歌。。。%v\n",i)
   }
}

func main() {
   go Task1()
   go Task2()
   for i := 0; i < 2; i++ {
      runtime.Gosched()
      fmt.Println("主协程正在执行", i)
   }
}  

使用runtime.Gosched()的执行结果

文章来源:智云一二三科技

文章标题:Golang并发编程,2、Gosched的使用,礼让子协程

文章地址:https://www.zhihuclub.com/98861.shtml

关于作者: 智云科技

热门文章

网站地图