作为 renjin Java 库用户的新手,我打算利用 renjin ScriptEngine 在多个线程上并行执行计算。显然可以在每个线程上初始化一个 renjin ScriptEngine 实例,然后初始化的 renjin 实例可以被其所属线程使用。
然而,由于一个renjin实例的初始化需要相当长的时间,我想到了一个问题:多个线程是否可以共享一个enjin ScriptEngine实例并并行调用它?
您不能使用共享的 RenjinSession 安全地同时评估多个 R 表达式。从技术上讲,如果您验证您调用的 R 函数都不会影响会话级状态,则可以,其中包括:
但是所有这些东西在 base 和 stats 包中的 R 函数中都很常见。
如果要减少初始化新 RenjinSessions 的开销,可以考虑使用ThreadLocal为每个线程缓存一个会话,或者使用Apache Commons Pool库之类的东西来维护一个可以被新线程快速获取的初始化会话池。