我对 Go 如何处理 Google App Engine 上的并发请求有点困惑。所以我希望有人能提供一些澄清。
以下是我收集到的事实:
Go 在 App Engine 上是单线程的。 -这是因为可以通过使用多个线程创建竞争条件来执行任意指针算术 https://stackoverflow.com/a/11443482/236564
Goroutines 被多路复用到多个操作系统线程上,因此如果其中一个线程发生阻塞(例如在等待 I/O 时),其他线程会继续运行。 http://golang.org/doc/effective_go.html#goroutines
[App Engine 有]10 个并发限制,[该限制]是通过每个运行时的并发线程限制来强制执行的。大多数情况下,我们的调度程序将尝试启动一个新实例。 https://stackoverflow.com/a/11443482/236564
如果 Go 在 App Engine 上是单线程的,那么第 3 点就没有意义了。这就留下了 1 和 2。如果 App Engine 上的 Go 是单线程的,并且需要线程在阻塞 I/O 时继续执行,那么 App Engine Go 实例似乎会在等待 I/O 时阻塞所有 goroutine。
它是否正确?如果不是,Go 的并发性如何在 App Engine 上真正发挥作用?
帮助量化事物。如果我将连接保持打开状态 30 秒。单个 AE Go 实例可以维持多少并发连接?
谢谢。
编辑:这是功能请求,它将允许 Go 实例
处理超过 10 个并发请求允许配置限制
每个并发请求数
实例 http://code.google.com/p/googleappengine/issues/detail?id=7927。
请加星标。
一个 Go App Engine 实例允许 10 个并发请求,但仅运行 1 个 CPU 线程。实际上,可以同时处理多个请求,但一次只有一个请求能够执行 CPU 工作。例如,如果一个请求正在等待数据存储 API 调用返回,则同一实例可以自由处理另一个请求。
您的陈述“如果 Go 在 App Engine 上是单线程的,那么第 3 点就毫无意义了。”是不正确的。对单个 Go App Engine 实例的并发正在进行的请求仍然存在 10 个限制。当文档谈到“线程”时,用词有点松散。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)