我已经阅读了很多JBoss Drools的留档,但是对于是否所有规则都是并发执行的(当然它们是并发触发的),我找不到一个明确的答案。更具体地说,对于单个输入和一个由1000条规则组成的规则集,执行每个规则中的“当”条件和“然后”条件,一个接一个地顺序执行,或者同时并行执行。
一方面,rete算法意味着并行,当然是当选择节点折叠时。然而,在节点优化后,评估是顺序的吗?内存和连接节点beta看起来应该同时执行,但是它们是吗?
此外,Drools留档提到了“顺序模式”,说默认情况下这是关闭的。那么什么是打开的,并行模式?还有一个max线程选项暗示线程。
另一方面,有人告诉我代码不使用线程,因此并发计算,但大部分是按顺序执行的。
有没有人看到任何留档可以证明这个案子?
谢谢!
在标准rete算法中没有并行性的迹象。匹配规则产生冲突集,然后议程应用策略依次触发这些规则。
多年来,在匹配或发射阶段,已经做了许多努力来平行化rete的一部分。
并行触发所有规则时的一个大问题是确定性执行。
我们目前正在Drools中探索并发和并行匹配的各种策略。我们也将探索并发规则触发,但我们需要为用户找到更健壮的方法来指示哪些可以并行触发,哪些不能;以便用户在他们需要的地方获得确定性执行。
看起来你已经解决了问题,但是如果你需要,我仍然可以提供更多的信息。Drools的源代码中使用了一个并发库,显示了github Web链接,https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/concurrent/ExecutorProviderImpl.java.
有些点,
>
当然,操作执行器中使用了线程工厂。如果您阅读此网络链接中显示的源代码,您可以找到线程库。
你还问了maxThread,Drools中使用的线程池确实有一个池大小,如源代码所示。newExecator=new ThreadPoolExecator(池. SIZE,池.SIZE,60L,TimeUnit.SECONDS,new LinkedBlockingQueue