如何检查 goroutine 是否成功创建?

在 Go 中,go是产生 goroutine 的关键字。但是,关键字似乎没有返回任何值,那么我如何检测 goroutine 是否正确生成?

Go 似乎使用以下方法来检查 func 是否成功。

value, err = myFunc(value)

go关键字是否有类似的用法来检测创建错误?go如果失败,它似乎会抛出运行时异常。

我想进行测试以找出我可以为 CPU 创建的最大协程数。


海绵宝宝撒
浏览 265回答 3
3回答

慕桂英4014372

正如你已经知道的:value, err = myFunc(value)是通过返回内置error类型来处理异常的惯用方法。在某种程度上,您可以将其与已检查的异常进行比较,我猜。但是,在您的情况下,未能生成新goroutine的更像是运行时异常。这些如何golang手柄是利用恐慌。您可以使用内置recover()函数在代码中处理它们,该函数将尝试重新获得对执行流程的控制。panic否则,它将向上堆栈直到它使程序崩溃。请注意,recover()必须在正在被defer编辑的函数中调用,这些函数被推入一个列表中,并且总是在它们被延迟的函数的末尾被调用 - 所以即使panic发生它们也会被调用,允许您打电话recover()。如果您只是尝试recover()在函数末尾(或在您恐慌子函数之后的任何地方)调用,则执行将永远不会到达它。如果您可以处理恐慌(recover()不返回 an err)以便您的程序实际上可以继续,它将从引发恐慌的函数所在的点开始执行。认为上面的博客文章就足够了,但如果您需要更多示例,请在此处发表评论。此外,您的系统很可能会受到 RAM 内存而不是 CPU 的限制。

HUX布斯

goroutine 创建(或多或少)只是内存分配。您通常无法捕获内存分配异常,goroutines 也是如此。如果您的程序内存不足,除了退出和重新启动之外,您通常无能为力。

白衣非少年

如果您使用的函数返回错误的 go 例程,您可以改为调用匿名函数并处理匿名函数中的错误。go func() {    value, err := myFunc()}()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go