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

并行流 线程池

并行数据库流

在上一篇文章中 ,我写了关于使用并行流和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/335418.shtml

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

相关文章

hibernate框架 最新_java框架,使用最频繁的9个程序!

Java在多年的发展历程中&#xff0c;已证明自己是为软件开发而生的顶级通用编程语言。Java 广泛用于科学和教育&#xff0c;金融&#xff0c;法律和政府等许多行业。Java 是开源和面向对象的&#xff0c;其开发目的是使应用程序开发人员可以编写一次然后在任何地方运行。编译后…

twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理

twilio建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 今天&#xff0c;不到30秒左右…

unity webgl读写txt文件_python Files文件读写操作

今天学习python的Files文件读写操作&#xff0c;并记录学习过程欢迎大家一起交流分享。首先新建一个文本文件test.txt&#xff0c;内容如下:hello worldhello youhello mehello pythonhello universe然后新建一个python文件命名为py3_file.py&#xff0c;在这个文件中进行操作代…

垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)

垃圾收集 java通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; “无需为用户编写将寄存器返回到自由存储列表的程序。” 这条线&#xff08;以及随后的十几条线&#xff09;被埋在约翰麦卡锡&…

python函数的使用方法_百度资讯搜索_python函数的使用方法

金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值、元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块。可以把项...百度快照金生水起程序猿 2020年11月22日 12:13函数类型定义:python中…

red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本

red hat 4.1.2当应用程序开发人员或架构师负责探索容器化应用程序提供的可能性时&#xff0c;没有比“红帽容器开发套件”&#xff08;CDK&#xff09;容易的了。 Red Hat CDK具有本地OSX&#xff0c;Linux或Windows环境所需的所有Cloud工具&#xff0c;并且已预先配置了一些容…

高斯背景建模 matlab,高斯背景建模整理 – 要饭的

OpenCV 中高斯背景建模相关论文BackgroundSubtractorMOG:Paper : An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow DetectionWebsite : http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf创新点 &#x…

apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)

apache ignite在本文中&#xff0c; “使用Apache Ignite进行高性能内存计算”一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处理。 本文的一部分摘自 书 。 术语“复杂事件处理”或CEP没有广泛或高度接受的定义。 Wikipedia的以下引用可以简要描述什么是复…

tpm php,TPM系列

近来一直在整理资料&#xff0c;刚好看到有比较详细的介绍&#xff0c;就发扬一下“拿来主义”吧&#xff1a;)顺便鄙视一下某安全网站转载我的博客很乱&#xff1a;(1、安装环境准备1.1内核Linux内核2.6.12版本及以上&#xff0c;提供了对tpm芯片的支持&#xff0c;下载地址&a…

zookeeper 日志查看_每天使用的注册中心zookeeper,流量暴涨怎么办?

通过本文能学习什么&#xff1f;初步了解zookeeper监控如何运用tcpdump Wireshark抓包分析Dubbo在zookeeper上节点设计如何查看zookeeper节点快照背景zookeeper作为dubbo的注册中心&#xff0c;承载着服务的基础信息(方法名&#xff0c;分组&#xff0c;版本等)&#xff0c;服…

javaone_JavaOne 2016 Essentials:您不应该错过的7个事件和会话

javaone参加JavaOne吗&#xff1f; 确保您不会错过这些活动 又到了每年的这个时候。 旧金山一年一度的Java假期即将来临&#xff0c;全市各地举行了超过400场会议和活动。 随着所有这些丰富的内容和新体验同时发生&#xff0c;很容易就无法跟踪正在发生的事情。 在这篇文章中…

python比较两张图片是否一样_opencv_判断两张图片是否相同

python金融风控评分卡模型和数据分析微专业课&#xff08;博主亲自录制视频&#xff09;&#xff1a;http://dwz.date/b9vv本文为原创,转载请注明&#xff0c;作者 231469242qq.com OpenCV介绍 OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉库&a…

bat 存储过程返回值_为什么不推荐使用存储过程?

之所以有这个题目&#xff0c;我既不是故意吸引眼球&#xff0c;也不想在本文对存储过程进行教科书般论述。最近项目中遇到的存储过程问题&#xff0c;让我想起了去年在武汉出差时一位同事的发问&#xff1a;我觉得存储过程挺好用的&#xff0c;为什么你不建议用&#xff1f;当…

Mac下载JDK/安装JDK/卸载JDK

文章目录下载JDK安装JDK配置环境变量卸载JDK下载JDK 访问这个地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java18 进入下载JDK的界面后&#xff0c;下拉界面到下图所示的位置&#xff1a; 或者访问这个地址&#xff1a;https://www.oracle.com/cn/…

kettle 只有一个输入记录期待设置变量并且至少已经收到2个变量._OPNET学习笔记2...

双击主机网络打开对应的节点模型&#xff0c;从图中可以看到网络的分层&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;链路层&#xff1b;其中在传输层中我们用到的主要是UDP&#xff08;对实时性要求比较高&#xff09;&#xff0c;网络层又包括IP封装层…

python tkinter控件_Python3 tkinter基础 Label pack 设置控件在窗体中的位置

? python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Markdown ? 普通布局 code """ Author : 行初心 Date : 18-10-1 Blog : www.cnblogs.com/xingchuxin GitHub : github.com/GratefulHeartCoder ""…

oracle的mins,分钟的英文缩写,10min还是10mins!

请问,分钟的英文缩写是min,小时的英文缩写是h,还是hr?秒的..._知乎[图文]时间分钟的英文缩写是什么minutes 10 minutes意思是十分钟的&#xff0c;比如说路程 10minutes就是十分钟 没有10minutes这种表达[图文]分钟 min【minute】 超过多少分钟就用介词past表示超过 还差几分钟…

postman测试工具,如何对参数使用md5加密

先创建环境变量password&#xff0c;并定义了变量值&#xff08;例如&#xff1a;123456&#xff09;访问登录接口通常是post提交登录用户名称和登录密码&#xff0c;且以json格式提交&#xff0c;所以在body-raw-json&#xff0c;填写json串如下图所示&#xff1a; 接着在pre-…

开源java性能分析工具_Java性能监控:您应该知道的5个开源工具

开源java性能分析工具鲜为人知但有用&#xff1a;开源应用程序性能监视的状态 对于任何应用程序来说&#xff0c;最重要的事情之一就是性能。 我们要确保用户获得他们能获得的最佳体验&#xff0c;并想知道我们的应用已启动并正在运行。 这就是为什么我们大多数人至少使用一种…

cmd编译可以通过执行没有结果_Go语言是如何完成编译的

Go语言是一门需要编译才能运行的编程语言&#xff0c;也就说代码在运行之前需要通过编译器生成二进制机器码&#xff0c;随后二进制文件才能在目标机器上运行&#xff0c;如果我们想要了解Go语言的实现原理&#xff0c;理解它的编译过程就是一个没有办法绕过的事情。预备知识想…