【问题标题】:Thread safety / atomicity of App Engine Channel APIApp Engine Channel API 的线程安全/原子性
【发布时间】:2013-09-07 14:20:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: multithreading google-app-engine thread-safety go channel-api


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 2014-10-30
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2014-02-01
      相关资源
      最近更新 更多