Drools 多个输入在同一应用程序中并行运行,而不是为每个输入启动新的应用程序

Drools 多个输入在同一应用程序中并行运行,而不是为每个输入启动新的应用程序,drools,optaplanner,Drools,Optaplanner,正如我在调试模式下运行应用程序时看到的,Drools运行在4个不同的线程上。当我在两个线程同时运行两个输入的情况下启动应用程序时,仍然会保留相同的4个线程(例如,它们不会变成8个)。 我的问题是,在一个单独的应用程序中运行输入(并启动一个单独的Drools应用程序)是否有好处,或者所有这些都包括在内,我们使用一个应用程序并并行启动输入会得到相同的结果?使用1个JVM的优势: 堆池 JIT编译在java代码中只进行一次 如果重复使用基库,JIT编译只在DRL代码中进行一次 能够执行排队和循环求解

正如我在调试模式下运行应用程序时看到的,Drools运行在4个不同的线程上。当我在两个线程同时运行两个输入的情况下启动应用程序时,仍然会保留相同的4个线程(例如,它们不会变成8个)。
我的问题是,在一个单独的应用程序中运行输入(并启动一个单独的Drools应用程序)是否有好处,或者所有这些都包括在内,我们使用一个应用程序并并行启动输入会得到相同的结果?

使用1个JVM的优势:

  • 堆池
  • JIT编译在java代码中只进行一次
  • 如果重复使用基库,JIT编译只在DRL代码中进行一次
  • 能够执行排队和循环求解。请参阅SolverManager问题和分区搜索中runnablePartThreadLimit的用途(SolverManager在某些时候也支持此功能)
使用多个JVM的优点:

  • 垃圾收集器通常工作效率更高
  • 能够将操作系统(尤其在linux上)进程id链接到特定的内核。这允许通过操作系统配置进行循环求解

您能否通过“运行两个输入”每次输入更多?问题是(一如既往)您是(最初)受i/o约束还是受计算约束。这取决于你的核心数量。它可能会从一个Drools版本更改为下一个版本。根据引擎需要执行的处理量,即您的规则。-基准。