无法启动过多协程

来源: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 延迟函数都不会执行。

以下是一个简单的例子:

https://img1.sycdn.imooc.com/szimg/6562b2eb0951e9ba06990617.jpg


0
2
bobby
回复
慕妹3255656
是的,这种情况发生后就在运维的角度去监控服务 让这个服务重启就行了
2023-11-28
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

510 学习 · 530 问题

查看课程