问题

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

这是我收集的事实:

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

  2. Goroutine被多路复用到多个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 Instance处理超过10个并发请求并允许每个实例并发请求的可配置限制。请加注星标。

  最佳答案

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

您的陈述“如果Go在App Engine上是单线程的,那么第3点就没有意义了。”是不正确的。单个Go App Engine实例最多可以有10个并发的正在进行中的请求。当谈到“线程”时,文档有些松懈。

  相同标签的其他问题

multithreadinggoogle-app-enginego