作为人人Java库用户的新手,我计划利用renjin ScriptEngine并行执行多个线程的计算。在每个线程上初始化renjin ScriptEngine实例显然很好,然后初始化的renjin实例可以由其所属线程使用。
然而,由于一个renjin实例的初始化需要相当长的时间,因此我想到了一个问题:多个线程可以共享一个enjin ScriptEngine实例并并行调用吗?
答案 0 :(得分:0)
使用共享的RenjinSession无法安全地同时评估多个R表达式。从技术上讲,如果您确认您正在调用的R函数都不会影响会话级别状态,包括:
但是所有这些事情在基础和统计数据包中的R函数中都很常见。
如果你想减少初始化新RenjinSessions的开销,可以考虑使用ThreadLocal为每个线程缓存一个会话,或者使用类似Apache Commons Pool库的东西来维护一个可以是初始化会话的池。通过新线程快速获得。