多个输入 运行 在同一个应用程序中并行 vs. 为每个输入启动一个新应用程序
Multiple inputs running in parallel in the same application vs. starting a new application for each input
正如我所见,当 运行 应用程序处于调试模式时,Drools 运行 有 4 个不同的线程。当我用两个线程启动应用程序时 运行 两个并行输入再次保持相同的 4 个线程(例如,它们不会变成 8 个)。
我的问题是,运行 在一个单独的应用程序中输入(并由此启动一个单独的 Drools 应用程序)是否有好处,或者所有这些都被涵盖并且我们最终使用一个应用程序并启动相同的结果并行输入?
使用 1 个 JVM 的优势:
- 堆池
- 在 java 代码中仅进行一次 JIT 编译
- 如果您重复使用 kiebase,则在 DRL 代码中仅进行一次 JIT 编译
- 实现排队和round-robin求解的能力。请参阅 SolverManager 问题和
runnablePartThreadLimit
在分区搜索中的用途(在某些时候 SolverManager 也将支持)。
使用多个 JVM 的优势:
- 垃圾收集器通常工作效率更高
- 能够 link OS(尤其是在 linux 上)处理 id 到特定的核心。这允许通过 OS 配置进行 round-robin 求解。
正如我所见,当 运行 应用程序处于调试模式时,Drools 运行 有 4 个不同的线程。当我用两个线程启动应用程序时 运行 两个并行输入再次保持相同的 4 个线程(例如,它们不会变成 8 个)。 我的问题是,运行 在一个单独的应用程序中输入(并由此启动一个单独的 Drools 应用程序)是否有好处,或者所有这些都被涵盖并且我们最终使用一个应用程序并启动相同的结果并行输入?
使用 1 个 JVM 的优势:
- 堆池
- 在 java 代码中仅进行一次 JIT 编译
- 如果您重复使用 kiebase,则在 DRL 代码中仅进行一次 JIT 编译
- 实现排队和round-robin求解的能力。请参阅 SolverManager 问题和
runnablePartThreadLimit
在分区搜索中的用途(在某些时候 SolverManager 也将支持)。
使用多个 JVM 的优势:
- 垃圾收集器通常工作效率更高
- 能够 link OS(尤其是在 linux 上)处理 id 到特定的核心。这允许通过 OS 配置进行 round-robin 求解。