google appengine 的默认模式是每个实例都以单线程模式运行。如果需要,它们会通过生成新的 JVM 实例来处理并发请求。
一个新的开关允许 appengine 在同一个实例上并行处理多个请求。
到目前为止,为了确保同一用户的请求之间的线程安全,我在定期托管的 Java Web 应用程序中所做的是在 http 会话(或存储在会话中的值)上同步。Spring 也这样做(使用synchronizeOnSession
标志)。
这在 GAE 中是不可能的,因为 HttpSession(连同它存储的所有变量)在每个 http 请求中总是新的。也就是说,哈希码总是不同的。因此,同步对此没有任何影响。但即使这是可能的,appengine 也不保证来自同一用户的两个请求将由同一实例处理(类似于粘性会话)。
appengine 的新标志警告说:
如果您希望使用并发请求,您的应用程序代码需要在启用 .
那么,如何确保我的应用程序对于来自同一用户的操作是线程安全的?我最关心的是用户可以对他的 http 会话中存在的数据执行的操作。我显然只关心在同一实例中同步同一用户的请求。
谢谢