Go如何处理Google App Engine上的并发请求

Kyl*_*ley 15 google-app-engine multithreading go

我对Go如何处理Google App Engine上的并发请求感到有些困惑.所以我希望有人可以提供一些清晰度.

以下是我收集的事实:

  1. Go是App Engine上的单线程.- 这是因为可以通过创建具有多个线程的竞争条件来执行任意指针运算

  2. Goroutines被多路复用到多个OS线程上,因此如果应该阻塞,例如在等待I/O时,其他线程继续运行.

  3. [App Engine有一个] 10并发限制[通过对每个运行时的并发线程的限制来强制执行].大多数情况下,我们的调度程序将尝试启动一个新实例.

如果Go是App Engine上的单线程,则第3点没有实际意义.这留下1和2.如果Go on App Engine是单线程的,并且线程需要在阻塞I/O时继续执行,那么似乎App Engine Go实例将在等待I/O时阻止所有goroutine.

它是否正确?如果不是Go的并发性如何在App Engine上真正起作用?

帮助量化事物.如果我要保持连接打开30秒.单个AE Go实例可以如何维护并发连接?

谢谢.

编辑:这是功能请求,允许Go实例处理超过10个并发请求允许每个实例的可配置的并发请求限制.请加星标.

dsy*_*nds 22

Go App Engine实例允许10个并发请求,但只运行一个CPU线程.实际上,可以同时处理多个请求,但只有一个请求可以一次执行CPU工作.如果一个请求是等待数据存储区API调用返回,则另一个请求可由同一实例自由处理.

您的声明"如果Go是App Engine上的单线程,则第3点是没有意义的." 是不正确的.对单个Go App Engine实例的空中请求仍有10个限制.当它谈到"线程"时,文档有点松散.

  • **这个答案需要更大的传播.**我已经理解Go运行时对请求进行排队,因此传入的请求必须等到当前请求被完全处理.很明显,单个请求可以产生许多go例程并同时运行,但并不是那么多例程可以. (3认同)
  • 我不能代表Python和Java,但Go并没有在App Engine上运行多线程.每个Go应用程序实例只有一个线程,但最多可以处理10个并发请求.至于F1实例可以处理什么,它在很大程度上取决于工作量.如果所有请求都在从数据存储中获取一些内容,将其稍微调整一遍并将其吐出,则没有理由它无法处理超过10个并发请求. (3认同)

use*_*331 1

我正在寻找答案并偶然发现了这个问题/答案,但最终也找到了有关此事的更多官方文档。根据Andrew Gerrand 和 Johan Euphrosine 的帖子,这可以明确配置。

从那篇文章:

这会将应用程序的每个实例配置为同时处理最多 100 个请求(默认为 10 个)。您可以将 Go 实例配置为最多服务 500 个并发请求。