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
相关文章:
drool 7 multiThread 测试
基本信息 通过option ,使用如下代码进行设置 //线程数量10MaxThreadsOption optionMaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);并发是以CompositeDefaultAgenda/Rule为颗粒度来的࿰…...
【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总
网安AIGC专题 写在最前面一些碎碎念课程简介 0、课程导论1、应用 - 代码生成2、应用 - 漏洞检测3、应用 - 程序修复4、应用 - 生成测试5、应用 - 其他6、模型介绍7、模型增强8、数据集9、模型安全 写在最前面 本文为邹德清教授的《网络安全专题》课堂笔记系列的文章,…...
如何在Simulink中使用syms?换个思路解决报错:Function ‘syms‘ not supported for code generation.
问题描述 在Simulink中的User defined function使用syms函数,报错simulink无法使用外部函数。 具体来说: 我想在Predefined function定义如下符号函数作为输入信号,在后续模块传入函数参数赋值,以实现一次定义多次使用…...
论文导读 | 10月专题内容精选:人的预测
编者按 本次论文导读,编者选择了10月份OR和MS上与"人的预测"有关的三篇文章,分别涉及群体智慧的提取,个体序列预测的评估,以及决策者对风险的扭曲感知在分布式鲁棒优化中的应用。其中,从基于"生成式可能…...
深度学习18
卷积层 查看每个数据 使用tensorboard查看 池化层 使用数据集进行训练 创建实例,使用tensorboard进行显示 最大池化保留了图片信息,神经网络训练的数据量大大减小,可以加快训练 非线性激活 非线性激活为神经网络加入了一些非线性的特质…...
Mysql数据库 18.Mysql SQL优化
SQL优化 一、插入优化 多条插入语句,影响执行效率 优化方案 1、批量插入: 在一条insert语句中多条数据,但是如果数据量过大,也不能完全使用一条语句语句,建议数据量为一次性插入1000条以下的数据 如果数据量多大&…...
[AutoSAR 存储] 汽车智能座舱的存储需求
公知及经验整理,原创保护,禁止转载。 专栏 《AutoSAR 存储》 <<<< 返回总目录 <<<< 1 智能座舱的发展: 1.1 发展历史 车辆信息娱乐系统的发展可以分为三个阶段。 机械化阶段 在上世纪90年代,车辆仪表盘…...
大数据-之LibrA数据库系统告警处理(ALM-37006 Coordinator进程异常)
告警解释 当出现如下情况时,产生该告警: CN所在机器发生硬件故障(断电、硬盘损坏等)。CN实例数据目录中的postgresql.conf配置文件不存在或者其中某个配置参数不正确。CN实例线程无法监听IP,或者无法绑定监听端口。C…...
python 列表的操作
增加 # append 在已有的列表末尾插入一个值 list1[张三,李四] list1.append(王二) print(list1)# expand 在已有的列表末尾追加一个列表 list1 [love,peace,keep] list2 [beautiful,string] list1.extend(list2) print(list1)# insert 在指定位置插入一个值list1 [love,peac…...
Vue快速实践总结 · 上篇
文章目录 模板语法数据绑定事件处理计算属性监视属性(监听器)条件渲染列表渲染数据监视原理内置指令总结生命周期组件化编程组件使用步骤组件的嵌套this指向单文件组件ref、props 脚手架(Vue CLI)render函数 参考自己的Vue专栏以及Vue官方文档 模板语法 …...
外汇天眼:香港监管机构对AMTD Global Markets Limited启动法律诉讼
香港证监会(SFC)已经启动了法律程序,要求首次审裁法院调查AMTD Global Markets Limited(AMTD,目前以orientiert XYZ Securities Limited为名)及其前高管在与首次公开发行(IPO)相关的…...
OpenCV入门教程
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
84基于matlab的数字图像处理
基于matlab的数字图像处理,数据可更换自己的,程序已调通,可直接运行。 84matlab数字图像处理图像增强 (xiaohongshu.com)https://www.xiaohongshu.com/explore/656219d80000000032034dea...
jQuery_09 事件的绑定与使用(on)
jQuery使用on绑定事件 jQuery可以给dom对象添加事件 在程序执行期间动态的处理事件 1. $("选择器").事件名称(事件处理函数) $("选择器") : 选择0或者多个dom对象 给他们添加事件 事件名称:就是js中事件名称去掉on的部分 比如单击…...
详解Java中的泛型(泛型的语法,擦除机制,泛型的上界)
目录 一.什么是泛型 二.Java中为什么要使用泛型 三.泛型的语法 四.泛型类的使用 五.泛型的编译机制(擦除机制) 六.泛型的上界 一.什么是泛型 泛型(Generics)是Java SE 5中引入的一个新特性,可以使Java中的类和方…...
数据结构算法-贪心算法
引言 贪心:人只要有 “需求“ ,都会有有点“贪“, 这种“贪“是一种选择,或者“”取舍“ RTS(即时战略)游戏: 帝国时代里 首先确保拥有足够的人口 足够的粮食,足够的战略资源 足够的…...
【云备份】数据管理模块
文章目录 1. 数据管理模块要管理什么数据?2. 数据管理模块如何管理数据?3. 数据管理模块的具体实现BackupInfo 数据信息类NewBackupInfo —— 获取各项属性信息 DataManager 数据管理类构造函数析构函数insert —— 新增update —— 修改GetOneByURL——…...
C++ :const修饰成员函数
常函数: 常函数: 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 属性可修改: class Person { public: void showPerson() …...
论文阅读:“Model-based teeth reconstruction”
文章目录 AbstractIntroductionTeeth Prior ModelData PreparationParametric Teeth Model Teeth FittingTeeth Boundary Extraction Reference Abstract 近年来,基于图像的人脸重建方法日趋成熟。这些方法可以捕捉整个面部或面部特定区域(如头发、眼睛…...
Web 安全之证书透明(Certificate Transparency)详解
目录 证书透明性的概念 数字证书和颁发机构 证书透明的起源 证书透明的工作原理 证书透明的实现方法 证书透明的优点 浏览器和客户端对证书透明的支持情况 小结 证书透明(Certificate Transparency, CT)是网络安全领域中的一个重要概念ÿ…...
一次性拖鞋自动下料系统设计超声波热熔裁剪机设计【论文+CAD图纸+solidworks三维+开题报告+任务书+实习调研报告+其它相关资料】
一次性拖鞋自动下料系统与超声波热熔裁剪机的设计,聚焦于提升拖鞋制造环节的效率与精度。传统拖鞋生产中,人工下料易受操作误差影响,导致材料浪费与产品尺寸偏差;而普通裁剪方式可能因热熔不充分,出现边缘毛刺或连接不…...
用Python复刻经典!中国象棋游戏开发中的5个关键问题与解决方案
用Python复刻经典!中国象棋游戏开发中的5个关键问题与解决方案 当我在大学第一次尝试用Python实现中国象棋时,本以为只要把棋盘画出来、让棋子能移动就大功告成。直到真正动手编码,才发现那些看似简单的规则背后藏着无数"坑"。比如…...
SiameseAOE真实案例:社交媒体评价自动分析全流程
SiameseAOE真实案例:社交媒体评价自动分析全流程 1. 社交媒体评价分析的挑战与解决方案 在当今社交媒体时代,每天都有海量的用户评价产生。以某知名手机品牌为例,其官方账号每天收到上千条评论,内容涵盖产品功能、售后服务、使用…...
游戏鼠标优化工具:让普通鼠标在macOS上实现专业级体验
游戏鼠标优化工具:让普通鼠标在macOS上实现专业级体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 当你在Final Cut Pro中精准剪…...
FireRed-OCR Studio实战教程:OCR结果对接LangChain构建文档RAG系统
FireRed-OCR Studio实战教程:OCR结果对接LangChain构建文档RAG系统 1. 项目背景与价值 在当今信息爆炸的时代,如何高效地从海量文档中提取有价值的信息成为企业和个人面临的重要挑战。传统文档处理方式存在以下痛点: 人工录入效率低下&…...
浦语灵笔2.5-7B惊艳效果:思维导图→中心主题提取→子节点扩展生成
浦语灵笔2.5-7B惊艳效果:思维导图→中心主题提取→子节点扩展生成 1. 引言:当AI“看懂”你的思维导图 想象一下这个场景:你花了一下午时间,用思维导图软件整理了一个复杂的项目规划。导图里有中心主题、有层层分支、有各种图标和…...
ChatGLM3-6B零基础部署:Streamlit重构版5分钟快速搭建本地智能助手
ChatGLM3-6B零基础部署:Streamlit重构版5分钟快速搭建本地智能助手 1. 引言:为什么你需要一个本地专属的AI助手? 想象一下,你正在写一份重要的技术报告,需要快速查询某个编程概念;或者你在分析一份长达几…...
StructBERT-中文-large惊艳效果展示:中文新闻事件多源报道语义聚合案例
StructBERT-中文-large惊艳效果展示:中文新闻事件多源报道语义聚合案例 1. 引言:当新闻铺天盖地而来,如何看清真相? 你有没有过这样的经历?一个热点事件爆发,打开手机,各种新闻App、社交媒体、…...
OOMMF实战避坑指南:从编译报错到高级功能解析
1. OOMMF编译安装常见问题解析 第一次接触OOMMF的开发者,90%的时间都花在了环境配置和编译上。作为一个用C和Tcl混合编写的开源软件,OOMMF的编译过程确实存在不少"坑"。最常见的就是双击oommf.tcl后弹出的各种报错窗口——这往往意味着你需要…...
收藏!程序员/小白必看:AI不抢工作,只送红利(附普通人逆袭路径)
不管是刚入门的编程小白,还是深耕多年的程序员,几乎都有过这样的焦虑:AI会不会抢走我的工作?会不会让我多年的积累变得毫无价值?其实与其内耗纠结、害怕被替代,不如换个更清醒的思路——打不过,…...
