例如,如果我有100万个事实对象,则通过一组规则,其中规则的执行顺序无关紧要。以下之间会有任何性能差异:
只是为了好奇,因为我刚才听说后者的表现更好。
我自己做了一些基准测试。结果表明,不同的显着性方法确实有一些开销,并且增加了总处理时间(尽管不多),但是事实对象处理所花费的时间似乎相同。
不确定此观察是否符合底层代码逻辑。
我应该感谢你们的详细解释。
答案 0 :(得分:1)
议程,即包含所有规则激活的列表,按显着性排序。很明显,维护按某种标准排序的链表比使用无序标准更昂贵。当然,实现尝试尽可能高效,请参阅代码org.drools.core.util.BinaryHeapQueue。
对每个规则使用不同的突出性将是最坏情况的一个因素。另一个是插入和点击的交错,这可能会导致不同的显着值有害,或者造成坏的或最坏的情况。
答案 1 :(得分:0)
对于Drools 6.给定规则的每个规则匹配(也称为激活或规则实例化)都会添加到双向链接列表中。触发该规则是迭代该列表的问题,依次触发每个规则。
要评估的每个规则都放在BinaryHeapQueue上,然后依次弹出规则,评估,生成链表,然后重复尝试触发。
如果每条规则存在大量规则匹配,则堆队列的成本将不明显。如果每个规则的规则匹配数量较少,但是规则很多,那么您可能会看到10%(这是一个猜测)或相应的开销。