一个renjin R脚本引擎实例可以由多个线程并行使用

时间:2016-10-17 10:54:50

标签: java renjin

作为人人Java库用户的新手,我计划利用renjin ScriptEngine并行执行多个线程的计算。在每个线程上初始化renjin ScriptEngine实例显然很好,然后初始化的renjin实例可以由其所属线程使用。

然而,由于一个renjin实例的初始化需要相当长的时间,因此我想到了一个问题:多个线程可以共享一个enjin ScriptEngine实例并并行调用吗?

1 个答案:

答案 0 :(得分:0)

使用共享的RenjinSession无法安全地同时评估多个R表达式。从技术上讲,如果您确认您正在调用的R函数都不会影响会话级别状态,包括:

  • 修改R Global环境
  • 生成随机数
  • 更新选项()
  • 触发评估共享的,未评估的Promises

但是所有这些事情在基础和统计数据包中的R函数中都很常见。

如果你想减少初始化新RenjinSessions的开销,可以考虑使用ThreadLocal为每个线程缓存一个会话,或者使用类似Apache Commons Pool库的东西来维护一个可以是初始化会话的池。通过新线程快速获得。

相关问题