5

我已经阅读了很多关于 JBoss Drools 的文档,但找不到关于所有规则是否同时执行的明确答案(当然它们是同时触发的)。更具体地说,对于单个输入和例如 1000 条规则的规则集,在每个规则中执行“when”条件和“then”条件,一个接一个地顺序执行,或者同时并行执行。

一方面,rete 算法意味着并行性,尤其是在选择节点折叠时。然而,在节点优化之后,评估是连续的吗?并且 beta 内存和连接节点看起来应该同时执行,但它们是吗?

此外,Drools 文档谈到“顺序模式”,说默认情况下这是关闭的。那么什么是开启的,并行模式呢?并且有一个暗示线程的 maxThreads 选项。

另一方面,有人告诉我,代码不使用线程,因此是并发计算的,但大部分是按顺序执行的。

有没有人看到任何证明这种情况的文件?

谢谢!

4

2 回答 2

10

标准 rete 算法中没有并行性的迹象。冲突集由匹配的规则产生,然后议程应用策略依次触发这些规则。

多年来,无论是在匹配阶段还是在发射阶段,已经进行了许多努力来并行化 rete 的一部分。

并行触发所有规则时的一个大问题是确定性执行。

我们目前正在 Drools 中探索各种并发和并行匹配的策略。我们也会探索并发规则触发,但我们需要找到更强大的方式让用户指示什么可以并行触发,什么不能并行;以便用户在需要的地方获得确定性执行。

于 2012-05-14T11:29:17.693 回答
1

看起来您已经解决了问题,但如果您需要,我仍然可以提供更多信息。Drools的源代码中使用了一个并发库,github网页链接如图, https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/核心/并发/ExecutorProviderImpl.java

一些点,

  1. 当然,线程工厂用于操作执行器。如果您阅读此链接中显示的源代码,您可以找到线程库。

  2. Also you ask about the maxThread, the threadpool used in Drools does have a pool size as shown in the source code. newExecutor = new ThreadPoolExecutor( Pool.SIZE, Pool.SIZE, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(), threadFactory );

于 2017-05-23T06:47:03.870 回答