我对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上是单线程的,那么第三点就没有意义了.如果Go on App engine是单线程的,并且需要线程在阻塞I/O的同时继续执行,那么在等待I/O时,App Engine Go实例似乎会挡路所有的Goroutines.

对吗?如果没有,Go的并发性在App Engine上到底是如何工作的?

来帮助量化事物.如果我让连接保持打开状态30秒.单个AE GO实例如何维护并发连接?

非常感谢.

编辑:以下是允许Go实例执行以下操作的功能请求 处理多于10个并发请求Allow configurable limit of concurrent requests per instance. 请给它加星.

推荐答案

我正在寻找答案,偶然发现了这个问题/答案,但最终也找到了更多关于这一问题的官方文件.根据post by Andrew Gerrand and Johan Euphrosine,这可以明确配置.

从那篇帖子中可以看到:

这会将应用程序的每个实例配置为同时提供多达100个请求(默认为10个).您可以将Go实例配置为最多支持500个并发请求.

Go相关问答推荐

CGO如何转换为文件*类型

在Go中根据命名空间/字符串生成UUID

戈姆:如何将一对一联系起来?

我找不到pcap.Openlive的设备名称

Kafka架构注册表-Broker:Broker无法验证记录

如何将 goose 迁移与 pgx 一起使用?

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

将文本文件放入切片然后进行比较

如何在 Go 中编写示例测试?

如何匹配两次出现的相同但随机字符串之间的字符

如何确定作为函数参数传递的指针是否正在被修改或副本是否正在被修改?

在 Golang 模板中计算时间/持续时间

函数超时和 goroutine 泄漏

GRPC 反向代理混淆 GRPC 和 GRPC-Web

在 connect-go 拦截器中修改响应体

Ginkgo/Gomega panic 测试失败

有没有办法在一个 goroutine 返回后延迟后取消上下文?

为什么从 Go 1.17 开始在 go.mod 中有两个require块?

从接口类型转换为实际类型的不可能的类型断言

如何在 Go lang 中获取 ajax 发布请求值?