栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Rhino Script Engine的生命周期和并发语义是什么

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Rhino Script Engine的生命周期和并发语义是什么

因此,我进行了实验,Rhino引擎报告“ Mozilla Rhino”已被JavaDocs断言为“ MULTITHREADED”

“多线程”-引擎实现在内部是线程安全的,并且脚本可以同时执行,尽管脚本在一个线程上的执行效果可能对其他线程上的脚本可见。

这是代码…对我来说,它看起来是线程安全的,只要您传递的绑定也是线程安全的即可。

package org.rekdev;import java.util.*;import javax.script.*;public class JavascriptWTF {    public static void main( String[] args ) {        scriptEngineManager mgr = new scriptEngineManager();        List<scriptEngineFactory> factories = mgr.getEngineFactories();        for ( scriptEngineFactory factory : factories ) { System.out.println( String.format(         "engineName: %s, THREADING: %s",         factory.getEngineName(),         factory.getParameter( "THREADING" ) ) );        }    }}

…输出是…

engineName:ApplescriptEngine,
THREADING :null engineName:Mozilla Rhino,THREADING:MULTITHREADED


要回答您的确切问题…

  1. 绑定应该是线程安全的吗?
    在我看来,使它们成为线程安全是您的责任。换句话说,仅传递不可变的对象,并且引擎是否为线程安全的都不会成为问题。

  2. 是否应该允许多个线程共享一个scriptEngine实例?
    在我看来,这听起来很可行,但关键是可以通过绑定进行状态共享。不可变的对象是您的朋友。

  3. …还是每个线程都应该构造一个短暂的实例?
    在我看来,最好的思路是每次执行eval都是短暂的实例。

  4. …或将它们放在游泳池中?
    在当今这个时代,尝试自己收集资源很少是一个好主意。给短暂的实例一个镜头,衡量它的性能,然后从那里开始锻炼。

  5. 如果多个线程同时调用scriptEngine.eval(…),会发生什么?
    如果我正确理解Rhino引擎对MULTITHREADING的响应,则scriptEngine.eval应该可以进行并发调用。

  6. 对于Compiledscript实例
    ,存在相同的问题JavaDocs指出:“由Compiledscript的执行引起的scriptEngine状态的更改可能在引擎随后执行脚本的过程中可见。”
    http://docs.oracle.com/javase/6/docs/api/javax/script/Compiledscript.html。因此,在您似乎试图尽量减少scriptEngine实例数量的环境中,它们根本不具备线程安全性。

  7. 使用Invocable.getInterface(…)生成的接口实现是否存在相同的问题?你自己一个人在这里。我不确切知道为什么或何时使用此功能,这听起来像是您可能在这里“跳鲨”。如果您想更深入地了解脚本语言,建议您放弃Javascript,而选择Groovy以获得更可脚本化的Java。

  8. 大概,放置在Bindings中的对象遵循Java的垃圾回收。那些没有出现在绑定中的对象的垃圾回收又如何呢?
    如果它们不以绑定结尾,我希望将它们绑定到scriptEngine并遵循其生命周期(基于我阅读的文档)。合并scriptEngine实例听起来不是一个好主意。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号