在Go中,go
是生成goroutine的关键字。但是,关键字似乎没有返回任何值,所以如何检测goroutine是否正确生成?
似乎Go使用以下方法来检查func是否成功。
value, err = myFunc(value)
go
关键字是否有类似的用法来检测创建错误?如果失败,go
似乎会抛出运行时异常。
我想做一个测试,找出我可以为CPU创建的最大gorout数量。
答案 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()
}()