无法启动过多协程
来源:13-2 go的协程和python协程对比

慕妹3255656
2023-11-21
老师,您好。我是用Go 1.20的试验启动100万的协程发生了panic。
是因为Go版本更新后添加了限制还是和PC环境有关?
too many concurrent operations on a single file or socket (max 1048575)
我自己试着写了recover的代码(当然是在协程内部写的),发现无法捕获这panic。
查了一下资料,Go里有一些无法被恢复的panic。
https://stackoverflow.com/questions/57486620/are-all-runtime-errors-recoverable-in-go
这种panic是否属于无法恢复的? 实践中碰到这种问题一般如何解决?这种runtime的panic如果光靠codereview感觉很难发现。
写回答
1回答
-
bobby
2023-11-26
在 Go 中,无法被
recover
恢复的panic
通常是由一些严重的运行时错误引起的,这些错误表明程序可能处于不可恢复的状态。在这种情况下,Go 的设计哲学是让程序崩溃并停止执行,以防止可能的数据损坏或不一致性。如果你想要在出现
panic
时不让程序关闭退出,可以使用os.Exit
来捕获panic
并执行一些最后的清理工作,然后正常退出程序。请注意,这只是一种应急手段,因为在执行os.Exit
后,任何defer
延迟函数都不会执行。以下是一个简单的例子:
022023-11-28
相似问题