1、Contexts

用来存储线程特定的相关信息,也就是执行环境。
每个线程有且只有一个Context,用来执行javascript。

Context为了关联当前线程,用
Context cx = Context.enter();

javascript执行之后,用
Context.exit();
来退出。而且必须放在finally块中。

enter/exit是基于引用计数的,每引用一次,则计数器加1,当计数器为0,则取消与当前线程的关联。

2、Scopes
Scope是javascript对象的集合。
执行javascript要求一个scope,用来存储顶层的脚本变量。也是找标准对象的地方。

Scope是独立于Context的。


你可以同时的在多线程中执行同一个scope。
你可以在一个context中创建scope,然后你可以在另一个context中执行该scope的脚本。


Rhina保证访问javascript对象的属性是原子的。但不保证同时的使用相同的scope执行脚本。
如果两个脚本同时的使用相同的scope,脚本要复杂协调共享变量。

也就是说读是原子的,写就不是。

顶层scope(top-level scope)用Context.initStandardObjects来创建所有标准对象:
ScriptableObject scope = cx.initStandardObjects(); 

最方便的方法就是你需要scope的时候使用上面的方法来创建scope。
但是initStandardObjects方法是非常昂贵的,它需要分配大量内存。
下面说明怎么在多线程和多scope中共享scope。
评论
发表评论

您还没有登录,请登录后发表评论

Azi
搜索本博客
存档
最新评论