草庐IT

multithreading - App Engine Channel API 的线程安全/原子性

coder 2024-07-10 原文

当我尝试使用 Google App Engine 的 Channel API 从两个或多个 goroutines 和/或任务队列发送消息时会发生什么?例如

go channel.Send(context, clientID, "Hello")
go channel.Send(context, clientID, "World")

我知道在 GAE Go 中,所有 goroutines 都被多路复用到一个线程上。然而,这仍然允许在 I/O 期间进行抢占,并且 channel 发送可能符合 I/O 的条件。

GAE 开发服务器似乎序列化了所有请求,所以我没有看到任何 channel 发送重叠。生产服务器似乎允许一些请求并发,但 channel 发送看起来是原子的,或者至少可以安全地从不同的线程/goroutines 调用。

最佳答案

一般来说,App Engine API 调用可以并发调用,只要它们不会写入同一内​​存(例如,两个数据存储区。使用相同目标结构的 Get 调用是不安全的)。

关于multithreading - App Engine Channel API 的线程安全/原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674252/

有关multithreading - App Engine Channel API 的线程安全/原子性的更多相关文章

随机推荐