使用自定义线程池处理并行数据库流

并行数据库流

在我以前的文章中 ,我写了关于使用并行流和Speedment并行处理数据库内容的信息。 在许多情况下,并行流可能比通常的顺序数据库流快得多。

线程池

线程池


Speedment是一个开源的Stream ORM Java工具包和Runtime Java工具,它将现有的数据库及其表包装到Java 8流中。 我们可以使用现有的数据库并运行Speedment工具,它将生成与我们使用该工具选择的表相对应的POJO类。 Speedment的一个独特功能是它支持并行数据库流,并且可以使用不同的并行策略来进一步优化性能。默认情况下,并行流是在公共ForkJoinPool上执行的,它们可能会与其他任务竞争。 在本文中,我们将学习如何根据自己的习惯执行并行数据库流。
ForkJoinPool,可以更好地控制我们的执行环境。

加速入门

前往GitHub上的开放源Speedment ,学习如何开始Speedment项目。 将工具连接到现有数据库确实很容易。 阅读我的
前一篇文章提供了有关数据库表和PrimeUtil类的外观的更多信息,如以下示例所示。

在默认的ForkJoinPool上执行

这是我在上一篇文章中讨论的应用程序,它将并行扫描数据库表以查找不确定的素数候选者,然后将确定它们是否为素数,并相应地更新表。 它是这样的:

Manager<PrimeCandidate> candidatesHigh = app.configure(PrimeCandidateManager.class).withParallelStrategy(ParallelStrategy.computeIntensityHigh()).build();candidatesHigh.stream() .parallel()                                                // Use a parallel stream.filter(PrimeCandidate.PRIME.isNull())                     // Only consider nondetermined prime candidates.map(pc -> pc.setPrime(PrimeUtil.isPrime(pc.getValue())))  // Sets if it is a prime or not.forEach(candidatesHigh.updater());                        // Apply the Manager's updater

首先,我们使用stream().filter(PrimeCandidate.PRIME.isNull())方法在所有候选对象上创建一个流(使用名为ParallelStrategy.computeIntensityHigh()的并行策略),其中“ prime” stream().filter(PrimeCandidate.PRIME.isNull()) null 。 然后,对每个这样的总理候选人PC,我们无论是“黄金”列设置为true ,如果pc.getValue()是一个主要的或false ,如果pc.getValue()是不是一个素数。 有趣的是, pc.setPrime()方法返回实体pc本身,使我们能够轻松地标记多个流操作。 在最后一行,我们通过应用candidatesHigh.updater()函数以检查结果更新数据库。

同样,请确保查看我以前的文章 ,了解并行策略的详细信息和好处。 简而言之,Java的默认并行策略可以很好地满足较低的计算需求,因为它在每个线程上放置了大量初始工作项。 Speedment的并行策略对于中等到较高的计算需求更好地工作,从而将少量工作项布置在参与的线程上。

该流将确定完全并行的质数,并且执行线程将使用公共的ForkJoinPool如该图所示(我的笔记本电脑有4个CPU核心和8个CPU线程):

共叉联合池

使用自定义执行器服务

正如我们在本文开头所了解的那样,并行流是由Common执行的。
默认情况下为ForkJoinPool 。 但是,有时我们想使用我们自己的执行器,也许是因为我们害怕泛滥成灾
ForkJoinPool ,以便其他任务无法正常运行。 可以为Speedment(和其他流库)轻松地定义我们自己的执行程序,如下所示:

final ForkJoinPool forkJoinPool = new ForkJoinPool(3);forkJoinPool.submit(() -> candidatesHigh.stream() .parallel().filter(PrimeCandidate.PRIME.isNull()).map(pc -> pc.setPrime(PrimeUtil.isPrime(pc.getValue()))).forEach(candidatesHigh.updater()); );try {forkJoinPool.shutdown();forkJoinPool.awaitTermination(1, TimeUnit.HOURS);} catch (InterruptedException ie) {ie.printStackTrace();}

该应用程序代码未经修改,但被包装到一个我们可以控制自己的自定义ForkJoinPool中。 在上面的示例中,我们设置了只有三个工作线程的线程池。 工作线程不与公共ForkJoinPool的线程共享。

使用自定义执行程序服务的线程如下所示:

定制执行器

这样,我们既可以控制实际的ThreadPool本身,又可以使用并行策略精确控制工作项在该池中的布局方式!

保持游泳池中的热量!

翻译自: https://www.javacodegeeks.com/2016/11/work-parallel-database-streams-using-custom-thread-pools.html

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

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

相关文章

GDAL编译Windows平台下64位的方式

最近写的项目需要在64位的服务器上&#xff0c;结果32位下编译的不能用&#xff0c;只好重新编译一套64位的。在编译GDAL时&#xff0c;出现了连接错误&#xff0c;如下&#xff1a; LINK : error LNK2001: unresolved external symbol > _OCTNewCoordinateTransformation a…

CentOS7.x以上版本配置DNS失效解决办法

这2周做实验&#xff0c;centos7.x经常出现yum安装软件包的时候找不到解析地址&#xff0c;提示如下错误 正在尝试其它镜像。Error downloading packages: pam-devel-1.1.8-22.el7.x86_64: [Errno 256] No more mirrors to try. libcom_err-1.42.9-12.el7_5.x86_64: [Errno 256…

java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

>>#1 票数&#xff1a;41 已采纳使用slf4j无法做到这slf4j 。我想&#xff0c;缺少这个功能的原因是&#xff0c;几乎不可能为slf4j构建一个Level类型&#xff0c;它可以有效地映射到Facade后面所有可能的日志记录实现中使用的Level (或等效)类型。 或者&#xff0c;设计…

使用Cloudformation集成Spring Boot和EC2

在之前的博客中&#xff0c;我们将Spring Boot应用程序与Elastic beantalk集成在一起。 该应用程序是一个基于Servlet的应用程序&#xff0c;可以响应请求。 在本教程中&#xff0c;我们将部署一个Spring Boot应用程序&#xff0c;该应用程序在ec2实例上执行一些计划的任务。 …

出现$ref的原因及解决方案

$ref的产生原因 &#xff08;1&#xff09;重复引用&#xff1a;一个集合/对象中的多个元素/属性都引用了同一个对象 &#xff08;2&#xff09;循环引用&#xff1a;集合/对象中的多个元素/属性在相互引用导致循环 针对fastjson的处理 fastjson作为一款序列化引擎&#xff0c;…

Wireshark图解教程(简介、抓包、过滤器)

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据&#xff0c;并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样&#xff0c;Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码&am…

php格式书写,PHP书写格式详解(必看)

从一个例子开始。启动编辑器&#xff0c;创建一个php文件并键入如下代码&#xff1a;echo "你好&#xff01;";?>将该文件命名为 test.php 并存储于 E:html 目录下。在浏览器地址栏里访问该 php 文件&#xff1a;http://127.0.0.1/test.php&#xff0c;输出结果如…

java java se_Java SE 11:推动Java前进

java java se介绍 在我看来&#xff0c;这篇文章提出了Java语言应该如何发展成为一种首选语言。 它还提供了一些我喜欢但是有时&#xff08;可能永远不会&#xff09;成为Java的一部分的功能&#xff0c;出于某些原因&#xff0c;我将对此加以解释&#xff0c;这些功能有时我已…

用GDAL/OGR去读shapefile

一、读shapefile 1、首先&#xff0c;用Arcgis创建所要读的shp文件。打开ArcCatalog,右键NEW->Shapefile&#xff0c;名称Name:point &#xff0c;要素类型&#xff08;Feature Type&#xff09;:Point。点击Edit&#xff0c;选择投影类型。 2、打开ArcMap. 单击工具栏里的A…

【日 志】

/// <summary>/// 记录执行sql时的错误日志/// <para>cmdTxt 执行的sql</para>/// <para>inputParams 传入的Hashtable参数</para>/// </summary>private static void LogLastError(string cmdTxt, Hashtable inputParams){try{StringBuil…

php 数组移除指定健,php删除数组指定键的方法

php删除数组指定键的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后定义一个“array_remove”方法&#xff1b;最后利用“array_key_exists”、“array_search”等函数实现删除数组指定键即可。PHP删除Array数组里指定的key/*** php除数组指定的key值(直接删除k…

Intellij IDEA社区版中的SpringBoot入门

我们可以使用Intellij IDEA社区版来处理SpringBoot应用程序&#xff0c;因为我们不需要配置Tomcat&#xff0c;Wildlfy等服务器&#xff0c;只需运行main&#xff08;&#xff09;方法即可运行应用程序。 但是&#xff0c;Intellij IDEA社区版中没有提供直接创建SpringBoot应用…

SpatialHadoop中空间索引系列之(四)空间格网索引实现

有关空间格网索引原理详见前面章节讲述的内容。这里我们根据SpatialHadoop中具体的实现&#xff0c;来详细讲解下。格网索引是一级索引&#xff0c;格网的个数取决于两个参数&#xff0c;一个是数据集的大小&#xff0c;另外一个就是格网的大小。那么在SpatialHadoop当中&#…

php导入csv文件,php实现CSV文件导入和导出

项目开发中&#xff0c;很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件&#xff0c;那么具体该如何实现呢&#xff1f;本文将使用PHP并结合mysql&#xff0c;实现了CSV格式数据的导入和导出功能。我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信…

剑指offer-二叉搜索树的后序遍历序列

/*输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。*/ /** 已知条件&#xff1a;后序序列最后一个值为root&#xff1b;二叉搜索树左子树值都比root小&#xff0c;右子树值都…

Nessus漏洞扫描教程之安装Nessus工具

Nessus基础知识 Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系…

php强制关机代码,程序员关机代码是什么?

程序员关机代码&#xff1a;1、定时关机&#xff0c;在运行中输入【at 22:00 Shutdown -s】&#xff1b;2、倒计时方式关机&#xff0c;在运行中输入【Shutdown.exe -s -t 3600】&#xff1b;3、自动关机&#xff0c;输入【shutdown -i】。程序员关机代码&#xff1a;1、比如你…

Java 9和应用程序性能监视的激动人心之处

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用&#xff01; 在当今的现代计算时代&#xff0c;软件创新的不断增强使我们更接近软件革命的时代。 也许在遥远的未来&#xff0c;这可能是对21世纪记忆犹新的方式。…

GPU下train 模型出现nan

When training on GPU, the error "Model diverged with loss NaN" is often caused by a sotmax thats getting a symbol larger than vocab_size 转载于:https://www.cnblogs.com/wuxiangli/p/10344259.html

php语言的四种循环控制语句,PHP循环控制语句

循环语句的作用就是在条件满足的情况下&#xff0c;可以执行多次相同或相似的任务&#xff0c;PHP中的循环语句包括for、while、do-while和foreach语句结构&#xff0c;下面分别介绍。for语句for语句结构一般用于执行确定循环次数的操作&#xff0c;其条件包括三个部分&#xf…