登录
首页 >  Golang >  Go问答

获得最高效的 goroutine

来源:stackoverflow

时间:2024-02-25 20:09:25 137浏览 收藏

本篇文章给大家分享《获得最高效的 goroutine》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

如何仅获取最快 goroutine 的结果。例如,我们有这个函数。

func add(num int)int{
   return num+5
}

我们有这个功能。

func compute(){
  for i := 0; i < 5; i++ {
     go Add(i)
  }
}

我想得到最先完成的goroutine的结果。


解决方案


使用 缓冲通道 获取多次灌浆执行的第一个结果

func Test(t *testing.T) {
    ch := make(chan int, 1)
    go func() {
        for i := 0; i < 5; i++ {
            go func(c chan<- int, i int) {
                res := Add(i)
                c <- res
            }(ch, i)
        }
    }()
    res := <-ch // blocking here, before get first result
    //close(ch) - writing to close channel produce a panic
    fmt.Println(res)
}

PLAYGROUND

channel 打开且从不关闭它时,不会发生内存泄漏。当 channel 不再使用时,它将被垃圾收集

好了,本文到此结束,带大家了解了《获得最高效的 goroutine》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>