2012-09-12 128 views
2

我有一个使用命名空间组织数据的GAE应用程序。我的问题是 - 命名空间是以每个线程为基础还是以每个实例为基础进行管理?如果我在GAE配置中启用线程安全,是否有可能在一个线程中设置命名空间会影响其他线程?GAE命名空间是否可以安全地用于线程安全?

+0

我已经写了一个线程安全分析,并在我的博客上发表评论(尽管GAE/J为导向)http://devcon5.blogspot.com我将添加您的问题作为一个更多的回答。希望您对我的分析有所回顾。谢谢 –

回答

0

它看起来像名称空间是GAE/J上的线程安全。

  • 命名空间设置为一个查询字符串参数
  • 循环25秒,记录的命名空间,每5秒,该线程一起:

    这已经通过运行简单的servlet,做以下的测试ID

  • 调用servlet 3次用三种不同的命名空间,与每个呼叫之间

10秒的暂停随着<线程> true </threadsafe >在appengine-web.xml中设置,所有请求都由同一个实例处理。通过检查应用引擎控制台中正在运行的实例的数量以及检查每个请求的日志来验证这一点。每个日志条目都有一个条目,如:instance = 00c61b117c8e9fd8aa8b02bff53de32a49b20e。在同一个实例中,在线程上设置名称空间不会影响其他线程上的名称空间。

要确认配置中的线程安全设置正常,它被设置为false并进行相同的测试运行。正如所料,每个请求都会创建一个新实例。

5

set_namespace()使用os.environ

def set_namespace(namespace): 
    ... 
    os.environ[_ENV_CURRENT_NAMESPACE] = namespace 

os.environ已经修补使用线程本地存储。

所以是的,名称空间是线程安全的。

+0

你知道这是否也适用于Java实现? – snae