drool 7 multiThread 测试

基本信息

通过option ,使用如下代码进行设置

 //线程数量10MaxThreadsOption option=MaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);

并发是以CompositeDefaultAgenda/Rule为颗粒度来的,不同CompositeDefaultAgenda/rule在不同线程内执行 。

限制条件

在 KnowledgeBaseImpl 类 有如下代码:

private void checkMultithreadedEvaluation( RuleImpl rule ) {if (config.isMultithreadEvaluation()) {if (!rule.isMainAgendaGroup()) {disableMultithreadEvaluation( "Agenda-groups are not supported with multithread evaluation: disabling it" );} else if (rule.getActivationGroup() != null) {disableMultithreadEvaluation( "Activation-groups are not supported with multithread evaluation: disabling it" );} else if (!rule.getSalience().isDefault()) {disableMultithreadEvaluation( "Salience is not supported with multithread evaluation: disabling it" );} else if (rule.isQuery()) {disableMultithreadEvaluation( "Queries are not supported with multithread evaluation: disabling it" );}}
}

即不支持

  • agenda 分组
  • getActivationGroup
  • 优先级设置
  • Query

以下为 Agenda-groups测试,验证了上述点

09:48:08.187 [main] WARN  o.drools.core.impl.KnowledgeBaseImpl.disableMultithreadEvaluation:1010 - Agenda-groups are not supported with multithread evaluation: disabling it
[Rule name=Stateless Hello World, agendaGroup=again, salience=0, no-loop=false]
1700876888206
Always  Stateless message in thread 1,1700876888279
Always Again Stateless message in thread 1,1700876901286
Hello World again in thread 1,1700876914293
Process finished with exit code 0取消
09:47:15.242 [main] WARN  o.d.c.k.builder.impl.KieBuilderImpl.packageNameForFile:394 - File 'org/drools/learn/MultiThreadHelloWorld.drl' is in folder 'org/drools/learn' but declares package 'org.drools.examples.multiThreadHello'. It is advised to have a correspondance between package and folder names.
[Rule name=Stateless Hello World, agendaGroup=MAIN, salience=0, no-loop=false]
1700876836099
Hello World in thread 19,1700876836192
Always  Stateless message in thread 18,1700876836193
Always Again Stateless message in thread 18,1700876849220
Stateless Goodbye cruel world in thread 24,1700876862233

其它

在这里插入图片描述
在executor里面submit的是CompositeDefaultAgenda,如果多个rule的when一致,会在同一线程执行,是drools把相关when合并在一个compsite吗?

Java 代码

// private static KieSessionConfiguration kieBaseConf;public static final void main(final String[] args) {KieServices ks = KieServices.get();KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration();//设置SequentialOption以提升性能kieBaseConf.setOption(SequentialOption.YES);//设置使用对象的equals函数来进行对象比较kieBaseConf.setOption(EqualityBehaviorOption.EQUALITY);//设置exception 捕获,不设置为默认使用org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandlerkieBaseConf.setOption(ConsequenceExceptionHandlerOption.get(DroolsConsequenceExceptionHandler.class));//线程数量10MaxThreadsOption option = MaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);//使用resource模式装载,参考https://zhuanlan.zhihu.com/p/519969197Resource resource =new ClassPathResource("org/drools/learn/MultiThreadNoModifyHelloWorld.drl");KieBase base = new KieHelper().addResource(resource).build(kieBaseConf);StatelessKieSession ksession = base.newStatelessKieSession();System.out.println(ksession.getKieBase().getRule("org.drools.examples.MultiThreadNoModifyExample","Stateless 4 "));ArrayList result = new ArrayList<Object>();ksession.setGlobal("list", result);KieRuntimeLogger logger= ks.getLoggers().newFileLogger(ksession, "./helloworld");System.out.println(System.currentTimeMillis());Message message = new Message();message.setMessage("Hello World");message.setStatus(10);ksession.execute(message);logger.close();}

DRL

package org.drools.examples.MultiThreadNoModifyExampleimport org.drools.learn.MultiThreadNoModifyExample.Message;global java.util.List listrule "Stateless 0  "dialect "mvel"whenm : Message( status >0 , status : status )thenSystem.out.println(   " 0 in thread " + Thread.currentThread().getId()+","+ Thread.currentThread().getName()+","+System.currentTimeMillis());Thread.sleep(13000);
endrule "Stateless 1  "dialect "mvel"whenm : Message( status >1 , status : status )thenSystem.out.println(  " 1 in thread " + Thread.currentThread().getId()+","+ Thread.currentThread().getName()+","+System.currentTimeMillis());Thread.sleep(13000);
endrule "Stateless 2  "dialect "mvel"whenm : Message( status >2 , status : status )thenSystem.out.println(  " 2 in thread " + Thread.currentThread().getId()+","+ Thread.currentThread().getName()+","+System.currentTimeMillis());Thread.sleep(13000);
endrule "Stateless 3  "dialect "mvel"whenm : Message( status >3 , status : status )thenSystem.out.println(   " 3 in thread " + Thread.currentThread().getId()+","+ Thread.currentThread().getName()+","+System.currentTimeMillis());Thread.sleep(13000);
endrule "Stateless 4  "dialect "mvel"whenm : Message( status > 4 , status : status )thenSystem.out.println(   " 4 in thread " + Thread.currentThread().getId()+","+ Thread.currentThread().getName()+","+System.currentTimeMillis());Thread.sleep(13000);
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机可ping树莓派树莓派无法ping虚拟机 的解决办法

问题描述 在学习交叉编译的过程中&#xff0c;发现了树莓派无法ping通虚拟机的问题。所以我尝试了各种ping&#xff0c;发现&#xff1a; 虚拟机可以ping通树莓派和主机树莓派可以ping通主机主机可以ping通树莓派和虚拟机唯独树莓派没法ping通虚拟机 尝试各种方法后找到一种…

香港站群服务器中1C/2C/4C/8C 的概念及区别

​  在选择香港站群服务器时&#xff0c;经常会看到1C、2C、4C和8C等不同的IP段。这些IP段代表了不同的子网掩码长度&#xff0c;也反映了服务器的IP地址数量和丰富性。 让我们来了解一下什么是IP段。IP段是指一组连续的IP地址&#xff0c;其中每个地址的前三个数字相同&…

计算机网络常考计算题之循环冗余校验(宝典教学)

文章目录 奇偶效验循环冗余校验例题四步走另一种题型 本文讲述了计算机考研中易出现的循环冗余校验&#xff0c;点赞关注收藏不迷路哦 我是一名双非计算机本科生&#xff0c;希望我的文章可以帮助到你。 奇偶效验 奇偶校验&#xff1a;也可以检测数据在传输过程中是否出现错误…

【算法挨揍日记】day33——1027. 最长等差数列、446. 等差数列划分 II - 子序列

1027. 最长等差数列 1027. 最长等差数列 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] &#xff0c;且 0 < i1 < i2 < ... < …

机器学习-线性模型·

线性模型是一类用于建模输入特征与输出之间线性关系的统计模型。这类模型的基本形式可以表示为&#xff1a; 其中&#xff1a; 是模型的输出&#xff08;目标变量&#xff09;。 是截距&#xff08;常数项&#xff0c;表示在所有输入特征都为零时的输出值&#xff09;。 是权重…

在项目中集成marsUI

拷贝文件夹到目标项目 集成 安装相关依赖 npm i --save ant-design-vue4.x npm i less npm i nprogress npm i consola npm i echarts npm i vue-color-kit npm i icon-park/svg npm i vite-plugin-style-import 配置Vite文件 使用 效果

C#,《小白学程序》第二十七课:大数四则运算之“运算符重载”的算法及源程序

1 文本格式 using System; using System.Text; using System.Collections; using System.Collections.Generic; /// <summary> /// 大数的四则&#xff08;加减乘除&#xff09;运算 /// 及其运算符重载&#xff08;取余数&#xff09; /// </summary> public cl…

【经验分享】开发问题记录总结(持续更新)

目录 工具开发 界面类继承某自定义界面类时&#xff0c;出现布局混乱或者所有控件集中在左上角&#xff1f; 在继承自定义界面之后&#xff0c;以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后&#xff0c;为什么该变量无法进行字符串比较&…

java协同过滤算法 springboot+vue游戏推荐系统

随着人们生活质量的不断提高以及个人电脑和网络的普及&#xff0c;人们的业余生活质量要求也在不断提高&#xff0c;选择一款好玩&#xff0c;精美&#xff0c;画面和音质&#xff0c;品质优良的休闲游戏已经成为一种流行的休闲方式。可以说在人们的日常生活中&#xff0c;除了…

Ceph----RBD块存储的使用:详细实践过程实战版

RBD 方式的 工作 流程&#xff1a; 1、客户端创建一个pool&#xff0c;并指定pg数量&#xff0c;创建 rbd 设备并map 到文件系统&#xff1b; 2、用户写入数据&#xff0c;ceph进行对数据切块&#xff0c;每个块的大小默认为 4M&#xff0c;每个 块名字是 object序号&#xff…

【智能算法】基于黄金正弦和混沌映射思想的改进减法优化器算法

减法优化器&#xff08;Subtraction-Average-Based Optimizer&#xff0c;SABO&#xff09;是2023年刚出的智能优化算法。目前知网中文期刊基本搜不到&#xff0c;并且可以遇见未来一年文章也很少。SABO算法原理简单&#xff0c;算上初始化粒子&#xff0c;总共不超过6个公式。…

居家适老化设计第三十一条---卫生间水龙头

以上产品图片均来源于淘宝 侵权联系删除 居家适老化中&#xff0c;水龙头是一个非常重要的设备。水龙头的选择应该考虑到老年人的特点和需求。首先&#xff0c;水龙头的操作应该简单方便&#xff0c;老年人手部灵活性可能不如年轻人&#xff0c;因此水龙头应该设计成易于转动和…