Google App Engine 中的 Goroutine:限制和替代方案
在 Google App Engine 标准环境中,支持 Goroutine,但有一定的限制。虽然您提供的示例似乎可行,但不建议使用超出请求寿命的 Goroutine。
为什么不安全?
继续运行的 Goroutine请求完成后可能会导致应用程序实例中的内存泄漏和资源匮乏。这是因为 goroutine 的生命周期与请求的生命周期无关。
替代方案:runtime.RunInBackground
要安全地在后台 goroutine 中执行代码,您可以使用运行时.RunInBackground 函数。此函数在后台上下文中执行提供的函数,该上下文与请求的上下文不同。
<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) { err := runtime.RunInBackground(c, func(c appengine.Context) { // Do something... }) // Return 200 status code }</code>
Runtime.RunInBackground
注意,有一个每个实例最多有 10 个并发后台请求。超过此限制可能会导致性能问题甚至应用程序错误。
请求上下文中的 Goroutines
支持存在于请求上下文中的 Goroutines。这意味着您可以使用 goroutine 来处理属于请求处理一部分的任务。但是,这些 goroutine 必须在请求之前完成。
摘要
虽然 Google App Engine 标准环境支持 goroutine,但了解这些限制非常重要。为了安全高效的后台处理,请使用runtime.RunInBackground并确保后台任务在请求结束之前完成。
以上是Google App Engine 中的 Goroutines:为什么长时间运行的 Goroutines 是一个坏主意?的详细内容。更多信息请关注PHP中文网其他相关文章!