0

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

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

4

1 回答 1

0

您不能使用共享的 RenjinSession 安全地同时评估多个 R 表达式。从技术上讲,如果您验证您调用的 R 函数都不会影响会话级状态,则可以,其中包括:

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

但是所有这些东西在 base 和 stats 包中的 R 函数中都很常见。

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

于 2016-10-17T12:53:09.733 回答