gpt4 book ai didi

go - 启动 goroutine(即调用 'go')会失败吗?

转载 作者:IT王子 更新时间:2023-10-29 02:28:20 24 4
gpt4 key购买 nike

执行go f会不会失败?

go关键字没有返回值,高并发时如何判断一个goroutine是否启动成功?

例如:

package main

import (
"fmt"
"sync"
"time"
)

func main() {
var wg = &sync.WaitGroup{}
go func() { // How do I know if there is any failure here?
wg.Add(1)
fmt.Println("halo world")
wg.Done()
}()
time.Sleep(time.Nanosecond)
wg.Wait()
}

最佳答案

go语句不能失败(仅在内存不足等“极端”情况下,但失败的 go 语句将是您的问题中最少的)。

当然,如果没有同步,您无法保证 goroutine 计划运行的时间。您使用 sync.WaitGroup 的示例因此是不正确的,就好像 goroutine 直到 main goroutine 到达 wg.Wait() 时才被调度,它甚至可能永远不会启动,就像 main goroutine 结束,你的程序也结束。

而是在主 goroutine 中增加 WaitGroup 的计数器(最好延迟调用 WaitGroup.Done(),这样即使 goroutine 会 panic 也会调用它):

var wg = &sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("halo world")
}()
wg.Wait()

这样你甚至不需要 sleep ,wg.Wait() 将阻塞直到其他 goroutine 调用 wg.Done()(这只会发生当另一个 goroutine 完成它的工作时)。

关于go - 启动 goroutine(即调用 'go')会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com