Google app engine 谷歌应用引擎:哪个解决了竞争条件?交易还是比较和设置?

Google app engine 谷歌应用引擎:哪个解决了竞争条件?交易还是比较和设置?,google-app-engine,concurrency,race-condition,Google App Engine,Concurrency,Race Condition,在使用Python的googleappengine上,我正在寻找竞争条件问题的解决方案,即多个用户试图同时增加某个计数器。我找到了其中两个:中描述的增量计数器()和中的凹凸计数器()。 我的问题是:1)他们两个都完全解决了比赛条件问题吗?2) 如果是,哪一个更好 另外,我不知道这些代码是如何解决这个问题的,所以有人能详细介绍一下它们吗。例如,1)在increment_counter()事务期间,如果另一个用户更新计数器,该事务是否会失败?2) 类似地,在比较和设置中的bump_counter()

在使用Python的googleappengine上,我正在寻找竞争条件问题的解决方案,即多个用户试图同时增加某个计数器。我找到了其中两个:中描述的增量计数器()和中的凹凸计数器()。 我的问题是:1)他们两个都完全解决了比赛条件问题吗?2) 如果是,哪一个更好

另外,我不知道这些代码是如何解决这个问题的,所以有人能详细介绍一下它们吗。例如,1)在increment_counter()事务期间,如果另一个用户更新计数器,该事务是否会失败?2) 类似地,在比较和设置中的bump_counter()期间,如果其他用户更新计数器,client.cas()会失败吗

  • 是的,它们都可以消除比赛条件

  • 第一种是使用数据存储,第二种是memcache。因此,它们是无法比较的。Memcache是易失性的,可以随时清除-您不应该将其用于存储永久数据。因此,在这方面,数据存储事务更好。此外,事务可以确保一组实体上的原子性,而比较_和_集只能确保一个memcache值上的原子性

  • 事务不进行阻塞。如果它们检测到碰撞,则会失败,您需要将其回滚并自己重复

  • memcache也一样:您需要自己重复这个过程