java 3000个计算类执行性能

Choerodon2 2016-09-06 09:50:44
Java综合 公司有3000多个规则,每个规则对应一个类,每个规则类分两步执行,第一步评估结果,第二部执行结果,传入数据执行这3000个规则类特别的慢,每次传入数据等这3000个规则类执行完成都要几秒钟,性能很低,如果执行500个 效能还是可以的。启用3000个就慢,请问有什么办法优化?
...全文
1625 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这些是有太多的冗余的“规则”。规则应该提取共同的(左)部分,从而重写规则。
SR_ZJ 2016-10-21
  • 打赏
  • 举报
回复
起用多个线程!让每个线程去执行特定的个数
wrong1111 2016-10-10
  • 打赏
  • 举报
回复
我曾经也做过类似的,,有点像压缩文件。。 我那个前提条件是, 1,传入的参数是有固定,里面的变量也是有限的; 2,规则是固定有限的组合。 我把每次传入的具体的参数值与执行后的规则拼成一个串作key值,最后计算出来的结果做value缓存起来。 当你的数据重复执行上到一定量的时候,复用的性能就可以提升N倍。。
tianfang 2016-10-10
  • 打赏
  • 举报
回复
规则处理类先创建好,放入池中保存,这么多对象,创建和销毁的开销很高的 并发处理应该是需要的 ,测试一下同时开几个线程会是cpu达到75%(这个是预设的阈值,可以自行调整),这么多个线程去处理 1 生成任务列表 2 数据分发到n个处理线程 3 线程去任务列表取任务(规则序号),从规则类池中取出处理类,处理,放回池 4 等待全部线程处理完毕
zhuweisyyc 2016-10-09
  • 打赏
  • 举报
回复
3000个规则分类下,如果都是独立的多线程处理肯定能解决,别一下子起3000个,可以按组起线程
Choerodon2 2016-09-30
  • 打赏
  • 举报
回复
引用 4 楼 wrong1111 的回复:
多线程处理。。。除非非常占用CPU的除外。
cpu占用率特别高,开启500个规则没有问题,只要开启3000个 cpu就100%
Choerodon2 2016-09-30
  • 打赏
  • 举报
回复
引用 3 楼 wacky 的回复:
可以使用工厂模式和代理模式试试
试过了
Choerodon2 2016-09-30
  • 打赏
  • 举报
回复
引用 2 楼 funnyone 的回复:
借用分布式想法,就是把3000个规则部署到10个应用(每个应用可以一样但是需要标记我处理哪个规则),每个应用个处理300个规则,处理完把结果写到数据路,后续应用继续处理,数据库用字段标记处理到哪个步骤。 更复杂就是流程化处理,配置流程,其他同上。
想过用storm框架,研究了办公月也不是很理想,有具体点的实施方案吗,分成10个应用,但是结果最后面需要统一啊,这个用什么技术处理。不能与数据库交互。
积木 2016-09-25
  • 打赏
  • 举报
回复
首先你得知道慢是什么原因,如果是做这些事情本身就慢,那其实在业务上优化的可能性很小,我们才需要来进行在架构上的优化。 比如,当采用同步来进行这3000个规则调用的时候比较慢。我们可以采用异步的方式, 中间加入一个MQ。我们提交数据的时候 入口规则 先返回给前端一个ID,代表这个数据已经提交,是处理中的状态。 数据由上一个处理好的规则经由MQ传递给下一个处理好的规则。 最终处理结束后,将结果放置在某个地方, 提交者凭借ID来进行查询。 这样,每个规则都经由MQ来处理信息,在性能上就可以扩展,哪个规则慢,就扩展哪个规则,靠着服务器的堆砌来解决性能问题。
wrong1111 2016-09-23
  • 打赏
  • 举报
回复
多线程处理。。。除非非常占用CPU的除外。
runnersun 2016-09-10
  • 打赏
  • 举报
回复
可以使用工厂模式和代理模式试试
Choerodon2 2016-09-06
  • 打赏
  • 举报
回复
funnyone 2016-09-06
  • 打赏
  • 举报
回复
借用分布式想法,就是把3000个规则部署到10个应用(每个应用可以一样但是需要标记我处理哪个规则),每个应用个处理300个规则,处理完把结果写到数据路,后续应用继续处理,数据库用字段标记处理到哪个步骤。 更复杂就是流程化处理,配置流程,其他同上。

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧