Goroutine 能否在 Google App Engine 标准环境中有效利用?让我们更深入地探讨这一点。
考虑以下代码示例:
<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) { go func() { // do something ... }() return // 200 }</code>
虽然此代码片段可能看起来运行正常,但实际上需要注意的是,不建议在请求的生命周期之外持续存在的 goroutine。这是因为 Google App Engine 的标准环境不支持 goroutine 的并行执行。因此,超出请求时间的 goroutine 可能会导致意外行为,因此不建议使用。
作为替代方案,您可以利用 runtime.RunInBackground 函数来启动代码执行在后台 goroutine 中:
<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) { err := runtime.RunInBackground(c, func(c appengine.Context) { // do something... }) return // 200 }</code>
通过使用runtime.RunInBackground,您提供了一个将使用专用后台上下文在后台 goroutine 中执行的函数。此方法可确保后台处理不会干扰当前请求的上下文,并且是在 App Engine 标准环境中执行后台任务的首选方法。但是,请务必记住,每个实例的并发后台请求数上限为 10 个,以防止实例资源过多。
虽然不支持超出请求寿命的 Goroutines ,App Engine 的标准环境完全支持在请求上下文中运行的 goroutine:
The Go runtime environment for App Engine provides full support for goroutines, but not for parallel execution: goroutines are scheduled onto a single operating system thread. This single-thread restriction may be lifted in future versions. Multiple requests may be handled concurrently by a given instance; that means that if one request is, say, waiting for a datastore API call, another request may be processed by the same instance. (Source)
因此,请求上下文中的短期 goroutine 可以有效地用于并行处理、同步和其他任务,而无需损害应用程序的性能或稳定性。
以上是Goroutines 能否在 Google App Engine 标准环境中有效使用?的详细内容。更多信息请关注PHP中文网其他相关文章!