2010-04-01 73 views
0

我对GAE不满意,因为 - 一个不能有全局变量和'synchronize'关键字。相反,人们必须捕捉到一个基本的DB transcational异常,并在一个while循环中重试 - 这将消耗我所有的空闲CPU时间,并在我到达谷歌的qouata时开始花费我的钱。从GAE移植到TomCat或另一个servlet服务器

  1. 在tomcat中使用doPost()内同步安全吗? (我猜,只要所有的servlet都在1个虚拟机上运行,​​就可以了)。如果不是所有的tomcat配置,我如何配置tomcat使其安全?

如何将GAE应用程序转换为我自己的tomcat服务器? - 如何在tomcat上安装DataNucleus Access Platform?

致以问候

+0

该要求没有意义。你的问题在别的地方。请详细说明这个问题。 – BalusC 2010-04-01 12:10:47

+0

啊我已经看到了,你发布了几个有关该主题的相似/相关问题,例如这里:http://stackoverflow.com/questions/2556644/google-app-engine-atomic-section发布的答案是非常好的。再想一次。 – BalusC 2010-04-01 12:12:21

回答

2

App Engine基本上是一个分布式系统。你不能使用同步原语,因为你的应用程序将运行在多台虚拟机和多台机器上。依靠在单个虚拟机上运行将极大地限制应用程序的可伸缩性。

你为什么要这样做?几乎肯定有一种方法可以在不锁定的情况下实现它。

+0

感谢您的询问。说一个用户正在寻求最合适的免费资源。我们需要同步它,这样两个用户将不会被分配到相同的资源。 我知道我们可以使用数据库事务,如果抛出异常,然后我们检索一个循环,但这种解决方案浪费了CPU和数据库。这就像没有使用睡眠命令,而是循环,因为没有任何东西会减慢CPU时间... – bach 2010-04-01 10:27:23

+0

只是假设算法寻找最合适的算法是昂贵的 - 那么问题更具体 – bach 2010-04-01 10:37:19

+1

正如我已经说过,它只有'循环'如果有冲突。绝大多数时候不会有争用,所以它会在第一时间罚款。正如其他人所说的那样,当争用率较低时,乐观并发是一种常见且有效的方法。 – 2010-04-01 11:03:17

相关问题