goroutine回收机制

goroutine用了fork-join模型

这个模型也就是一种分治的思想

会把所有的goroutine fork发出去 然后再join收集回来

收集回来的join过程中使用了channel

同时一个join点可能是多个goroutine的同步

fork出去之后在返回之前当前的goroutine是对发出去的goroutine没办法控制的

虽然我们可以用context来限定超时

但是因为goroutine的context上下文只关联了reader使用者和receiver接收者 没有对发送者进行关联

所以如果reading使用者超时 sender没有办法对其进行终止 只能sender终止自己

这个reading的goroutine就泄漏了

所以goroutine没有很好的回收机制

这个问题似乎只能靠重启解决了

增加个timeout也就是少重启了几次

参考:

https://stackoverflow.com/questions/50570961/stop-goroutine-execution-on-timeout?answertab=votes#tab-top

猜你喜欢

转载自www.cnblogs.com/general10/p/12033388.html