gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:05:08 27 4
gpt4 key购买 nike

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

以下是我收集到的事实:

  1. Go 在 App Engine 上是单线程的。 - this is because it is possible to do arbitrary pointer arithmetic by creating race conditions with multiple threads

  2. Goroutines are multiplexed onto multiple OS threads so if one should block, such as while waiting for I/O, others continue to run.

  3. [App Engine has a] 10 concurrent limit [which] is enforced through a limit on concurrent threads on every runtime. Most of such cases, our scheduler will try to spin up a new instance.

如果 Go 在 App Engine 上是单线程的,那么第 3 点没有实际意义。剩下 1 和 2。如果 App Engine 上的 Go 是单线程的,并且线程需要在阻塞 I/O 时继续执行,那么看起来 App Engine Go 实例会在等待 I/O 时阻塞所有 goroutine。

这是正确的吗?如果不是,Go 的并发性如何在 App Engine 上真正发挥作用?

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

谢谢。

EDIT: here's the feature request which will allow Go Instance to handle more then 10 concurrent request Allow configurable limit of concurrent requests per instance. Please star it.

最佳答案

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

您的陈述“如果 Go 在 App Engine 上是单线程的,那么第 3 点没有实际意义。”是不正确的。对单个 Go App Engine 实例仍有 10 个并发进行中请求的限制。当谈到“线程”时,文档有点松散。

关于multithreading - Go 如何处理 Google App Engine 上的并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com