我可以在Google App Engine(标准环境)中使用Goroutines吗?

时间:2014-11-28 09:22:06

标签: google-app-engine go

以下示例似乎有效,但使用安全吗?我的目标是做一些非常简单的后台处理(而实际的任务队列工作感觉太重)。

func MyHandler(w http.ResponseWriter, r *http.Request) {

  go func() {
    // do something ...
  }() 

  return // 200
}

2 个答案:

答案 0 :(得分:7)

不支持超过请求的Goroutines,但您可以使用runtime.RunInBackground在后台goroutine中执行代码:

func MyHandler(w http.ResponseWriter, r *http.Request) {

  err := runtime.RunInBackground(c, func(c appengine.Context) {
    // do something...
  })

  return // 200
}

将使用与提供的上下文不同(并且可能超出)的背景上下文来调用所提供的函数。请注意,每个实例的同时后台请求数限制为10个。这是another example

请注意,生活在请求的上下文中的Goroutines支持:

  

App Engine的Go运行时环境提供全面支持   goroutines,但不是并行执行:goroutines被安排   到一个操作系统线程上。这个单线程限制   可能会在未来的版本中解除。可以处理多个请求   同时由一个给定的实例;这意味着如果有一个请求,   比方说,等待数据存储区API调用,可能是另一个请求   由同一个实例处理。 (Source

答案 1 :(得分:-2)

请记住,伙计们,并发和并行操作之间存在着天壤之别。这困扰了我一段时间(有时仍然)。看看Rob Pike说的话:https://www.youtube.com/watch?v=oV9rvDllKEg

换句话说,是的,AppEngine可以处理goroutines - 这不是并行的。这是以最有效的方式运行代码,并且是能够并行运行代码的前提......