Kyl*_*ley 15 google-app-engine multithreading go
我对Go如何处理Google App Engine上的并发请求感到有些困惑.所以我希望有人可以提供一些清晰度.
以下是我收集的事实:
Go是App Engine上的单线程.- 这是因为可以通过创建具有多个线程的竞争条件来执行任意指针运算
[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个限制.当它谈到"线程"时,文档有点松散.
我正在寻找答案并偶然发现了这个问题/答案,但最终也找到了有关此事的更多官方文档。根据Andrew Gerrand 和 Johan Euphrosine 的帖子,这可以明确配置。
从那篇文章:
这会将应用程序的每个实例配置为同时处理最多 100 个请求(默认为 10 个)。您可以将 Go 实例配置为最多服务 500 个并发请求。