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

时间:2014-09-11 01:30:55

标签: go creation goroutine

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

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

value, err = myFunc(value)

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

我想做一个测试,找出我可以为CPU创建的最大gorout数量。

3 个答案:

答案 0 :(得分:2)

如您所知:

value, err = myFunc(value)

是通过返回内置error类型来处理异常的惯用方法。在某种程度上,你可以将它与已检查的异常进行比较。但是,在您的情况下,未能生成新的goroutine更多是运行时异常。 golang如何处理这些是使用panics。您可以使用内置的recover()函数在代码中处理它们,该函数将尝试重新获得对执行流程的控制。如果没有它,panic将上升到堆栈,直到它崩溃程序。

请注意,recover()必须在defer编辑的函数中调用,这些函数被推入列表并始终在函数的末尾调用 - 因此,即使panic发生,也会调用它们,允许您拨打recover()。如果您只是尝试在函数结束时调用recover()(或者在恐慌子函数之后的任何地方调用),执行将永远不会到达它。如果你可以处理恐慌(recover()没有返回err),那么你的程序实际上可以继续,它将从引发恐慌的函数执行。

认为上面的博客文章已经足够了,但如果您需要更多示例,请在此处发表评论。

此外,您的系统很可能受RAM内存的限制,而不是CPU。

答案 1 :(得分:1)

goroutine创建(或多或少)只是一个内存分配。你通常不能捕获内存分配异常,它与goroutines相同。

如果您的程序内存不足,除了退出并重新启动之外,通常无法做任何事情。

答案 2 :(得分:0)

如果您正在使用返回错误的go例程的函数,则可以调用go匿名函数并处理匿名函数中的错误。

go func() {
    value, err := myFunc()
}()