批处理 设置电脑最佳性能_批处理最佳做法

批处理 设置电脑最佳性能

大多数应用程序至少具有一个批处理任务,在后台执行特定的逻辑。 编写批处理作业并不复杂,但是您需要了解一些基本规则,我将列举一些我发现最重要的规则。

从输入类型的角度来看,处理项目可以通过轮询处理项目存储库来实现,也可以通过将它们通过队列推送到系统中来实现。 下图显示了典型批处理系统的三个主要组件:

  • 输入组件(通过轮询或从输入队列加载项目)
  • 处理器:主要处理逻辑组件
  • 输出组件:输出结果的输出通道或存储位置

batch_processing_components

1.总是分批轮询

您一次只能检索一批项目。 我最近不得不在尝试检索所有可能的项目进行处理时,诊断由计划作业抛出的OutOfMemoryError。

系统集成测试正在使用少量数据,因此通过了,但是由于某些部署问题,当计划的作业脱机两天时,由于没有人消耗它们,因此要处理的项目数已经累积。 ,并且当调度程序重新联机时,由于它们不适合调度程序的内存堆,因此无法使用它们。 因此,仅设置高调度频率速率是不够的。

为避免这种情况,您只需要获取一批物品,将它们消耗掉即可,然后您可以重新运行该过程,直到没有剩余要处理的东西为止。

2.编写线程安全的批处理程序

通常,无论您选择并行运行多少个作业,计划作业都应正确运行。 因此,批处理程序应该是无状态的,仅使用本地作业执行上下文将状态从一个组件传递到另一个组件。 毕竟,即使是踩踏安全的全局变量也不是那么安全,因为作业的数据可能在并发执行时混合在一起。

3.节流

使用队列时(输入或在批处理程序中),应始终有限制策略。 如果物品的生产率始终高于消耗的物品,那么您将遭受灾难。 如果排队的项目保留在内存中,最终将用完它。 如果项目存储在持久队列中,则空间将用完。 因此,您需要一种平衡生产者和消费者的机制。 只要生产率是有限的,您只是要确保您有合适的消费者数量来平衡生产率。

当队列大小超过给定阈值时,自动扩展消费者就像开始新的消费者一样,是一种合适的自适应策略。 当队列大小低于其他阈值时杀死使用者,可以释放不必要的空闲线程。

create-new-consumer阈值应大于kill-idle阈值,因为如果它们相等,则当队列大小在阈值大小附近波动时,您将获得create-kill抖动。

4.存储工作结果

将工作结果存储在内存中不是很周到的事情。 选择一个持久性存储(MongoDb限制的集合)是一个更好的选择。

如果结果保存在内存中,而您忘记将它们限制在一个上限,则批处理处理器最终将耗尽内存。 重新启动计划程序将清除您以前的工作结果,这是非常有价值的,因为这是您获得的唯一反馈。

5.泛滥外部服务提供商

for(GeocodeRequest geocodeRequest : batchRequests) {mapsService.resolveLocation(geocodeRequest);
}

这段代码充斥着您的地图提供商,因为一旦您完成一项请求,几乎立即就会发出一个新请求,这给他们的服务器带来了很大压力。 如果batchRequests数目足够高,那么您可能会被禁止。

您应该在请求之间添加一个短暂的延迟,但是不要让当前的睡眠状态变慢,而应使用EIP延迟器。

6.对批处理

尽管程序风格的编程是大多数程序员的默认思维方式,但许多批处理任务更适合企业集成模式设计。 使用EIP工具更容易实现所有上述规则:

  • 消息队列
  • 投票渠道
  • 变形金刚
  • 分离器/聚合器
  • 延迟器

使用EIP组件可简化测试,因为您一次只专注于一项职责。 EIP组件通过队列传递的消息进行通信,因此将一个同步处理通道更改为调度的线程池只是一个配置细节。

有关EIP的更多信息,请查看出色的Spring Integration框架。 我已经使用了三年了,接种疫苗后,您会更喜欢它而不是过程编程。

参考: Vlad Mihalcea博客博客上的JCG合作伙伴 Vlad Mihalcea 批处理最佳实践 。

翻译自: https://www.javacodegeeks.com/2013/11/batch-processing-best-practices.html

批处理 设置电脑最佳性能

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

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

相关文章

JVM体系结构:JVM类加载器和运行时数据区

各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构。 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行时数据区 1.简介 在继续之前,让我们看一下Ja…

mysql5.6特性_MySQL5.6新版本特性

MySQL已发布新的系列版本5.6.x,如果打算升级的朋友可以尝试,虽然目前没有收到新版本的使用反馈,但凭借MySQL占据市场份额来看,新版本的确值得期待。五大特性:优化器的改进MySQL Optimizer 团队做了大量的工作为了不断的…

java计算整数出现的次数_[剑指offer题解][Java]1到n整数中1出现的次数

前言众所周知,《剑指offer》是一本“好书”。如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白。对于剑指offer题解这个系列,我的写作思路是,对于看过文章的读者,能够做到…

mysql 更改root密码及 主机_设置更改root密码(远程,本地)、连接mysql、mysql常用命令...

设置更改root密码1、将mysql加入环境变量中[rootcentos7 ~]# grep mysql /etc/profileexport PATH/usr/local/mysql/bin/:$PATH2、直接登录,无密码[rootcentos7 ~]# mysql -uroot3、方式一:设置密码[rootcentos7 ~]# mysqladmin -uroot password 123456W…

从NetBeans运行和调试WildFly Swarm应用程序

使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序。 在开发打包为ber或镂空jars的微服务时,您期望使用相同的轻松方式进行运行和调试。 好消息是您可以。 在本文中,我将逐步演示如何在NetBeans中运行…

hazelcast入门教程_Hazelcast入门

hazelcast入门教程7月,我写了一个博客向Java开发人员介绍erlang,重点介绍了这两种语言之间的一些异同。 erlang虚拟机具有许多令人印象深刻的内置功能,其中之一是它们独立于位置且可以相互通信。 这意味着可以通过编写很少的代码行在VM之间同…

[MEGA DEAL]完整的Java编程训练营(94%折扣)

成为Java Master的10门课程(83.5小时):使用JavaFX的设计UI,利用设计模式,Master Multithreading等 嘿,怪胎, 本周,在我们的JCG Deals商店中 ,我们提供了另一个超值优惠…

java重排序_Java内存模型FAQ(四)重排序意味着什么?

译者:Alex在很多情况下,访问一个程序变量(对象实例字段,类静态字段和数组元素)可能会使用不同的顺序执行,而不是程序语义所指定的顺序执行。编译器能够自由的以优化的名义去改变指令顺序。在特定的环境下,处理器可能会…

JVM体系结构101:了解您的虚拟机

Java虚拟机(JVM)架构和Java字节码101的初学者速成班 Java应用程序无处不在,它们在我们的手机,平板电脑和计算机上。 在许多编程语言中,这意味着要多次编译代码才能使其在不同的OS上运行。 对于作为开发人员的我们来说…

flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查

Flask-SQLAlchemy对数据库增删改查安装pip install flask-sqlalchemy具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释app.route(/)def index():#增加article1 Article(titletest1, contentthe first test)db.session.add(arti…

带有Jersey的JAX-RS教程,用于RESTful Web服务

在当今世界,数据扮演着非常重要的角色。 如此众多的应用程序将各种类型的数据用于不同的操作,所以最重要的方面是应用程序之间的通信。 当应用程序可以通信时,它们之间的数据共享变得容易。 就像在亚洲运行的应用程序向在欧洲运行的应用程序…

java swing 打开文件_java swing实现打开Excel文件并进行处理

这里选择Excel文件是业务需要,话不多说1、引入对Excel处理的相关依赖org.apache.poipoi3.16org.apache.poipoi-ooxml3.162、进行swing的相关布局代码:package com.mozarta;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.xssf.usermodel…

java的对象对象映射_Java对象到对象映射器

java的对象对象映射我在该项目上使用了Dozer一段时间。 但是,最近我遇到了一个非常有趣的错误,这促使我环顾四周,并尝试使用其他“对象到对象”映射器。 这是我找到的工具列表: 推土机:推土机是Java Bean到Java Bea…

java parallelstream_关于Java8 parallelStream并发安全的深入讲解

背景Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:parallelStream。在爬虫开发过程中,经常会遇到遍历一个很大的集合做重复的操作,这时候如果使…

使用Google Cloud Storage托管您的Maven工件

如果您使用Google Cloud并将Java用于项目,那么Google Cloud Storage是托管团队工件的理想场所。 它很容易设置,而且很便宜。 如果您对它们的功能不特别感兴趣,那么它比设置现有存储库选项(jfrog,nexus,arc…

java+map对象判断空值_java判断map中是否存在指定对象

Map判断是否包含指定的value使用containsValue方法。(推荐:java视频教程)定义containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true示例:/**** Map集合判断是否包含value**/public class MapDemo{public static vo…

excel查重复_毕业季 | 如何降低论文的查重率

毕业季吾日三省吾身实验做完了吗?论文写完了吗?查重能通过吗?学术圈的前辈告诉我们,只有站在巨人的肩膀上才能看得更远。在撰写一篇论文时,为保证质量和可靠性,难免需要引用前人的成果,这也反映…

Java,JavaFX的流畅设计风格进度栏

按照承诺,刚刚发布的Java JavaFX主题JMetro 4.6版为进度栏带来了新样式。 进度栏有两种可能的状态:确定和不确定,新的JMetro版本具有这两种状态。 在本文中,我还将详细介绍一些我在JMetro中遵守的API设计原则。 JMetro API设计原…

安卓最新系统_成纺移动校园(移动办公系统)V3.2.1 安卓最新版

成纺移动校园(移动办公系统)是额一个非常实用的办公工具。您可以使用该软件及时浏览最新的校园信息,同时涵盖许多功能,例如时间表查询,会议安排,校园地图,校车等。有需要的用户欢迎来绿色先锋网下载。 成纺移动校园简介…

pyqt 获取 UI 中组件_你想知道的React组件设计模式这里都有(上)

本文梳理了容器与展示组件、高阶组件、render props这三类React组件设计模式往期回顾:HBaseCon Asia 2019 Track 3 概要回顾随着 React 的发展,各种组件设计模式层出不穷。React 官方文档也有不少相关文章,但是组织稍显凌乱,本文就…