一个renjin R脚本引擎实例能否被多个线程并行使用
Can one renjin R script engine instance be used by multiple threads in parallel
作为renjin新手Java库用户,我打算利用renjin ScriptEngine在多线程上并行执行计算。在每个线程上初始化一个renjin ScriptEngine实例显然是可以的,然后初始化的renjin实例可以被它所属的线程使用。
但是,由于一个renjin实例的初始化时间比较长,我想到了一个问题:多个线程可以共享一个enjin ScriptEngine实例并并行调用吗?
您无法使用共享的 RenjinSession 安全地同时计算多个 R 表达式。从技术上讲,如果您验证 none 您正在调用的 R 函数会影响会话级状态,其中包括:
- 修改 R 全局环境
- 生成随机数
- 更新选项()
- 触发共享的、未评估的 Promise 的评估
但是所有这些在 base 和 stats 包中的 R 函数中都很常见。
如果您想减少初始化新 RenjinSession 的开销,请考虑使用 ThreadLocal to cache one session per thread, or use something like the Apache Commons Pool 库来维护一个可以被新线程快速获取的初始化会话池。
作为renjin新手Java库用户,我打算利用renjin ScriptEngine在多线程上并行执行计算。在每个线程上初始化一个renjin ScriptEngine实例显然是可以的,然后初始化的renjin实例可以被它所属的线程使用。
但是,由于一个renjin实例的初始化时间比较长,我想到了一个问题:多个线程可以共享一个enjin ScriptEngine实例并并行调用吗?
您无法使用共享的 RenjinSession 安全地同时计算多个 R 表达式。从技术上讲,如果您验证 none 您正在调用的 R 函数会影响会话级状态,其中包括:
- 修改 R 全局环境
- 生成随机数
- 更新选项()
- 触发共享的、未评估的 Promise 的评估
但是所有这些在 base 和 stats 包中的 R 函数中都很常见。
如果您想减少初始化新 RenjinSession 的开销,请考虑使用 ThreadLocal to cache one session per thread, or use something like the Apache Commons Pool 库来维护一个可以被新线程快速获取的初始化会话池。