如何自定义ForkJoinPool提升并行流 ParallelStream执行速度


今天就跟大家聊聊有关如何自定义ForkJoinPool提升并行流 ParallelStream执行速度,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在 java8 中 添加了流Stream,可以让你以一种声明的方式处理数据。使用起来非常简单优雅。ParallelStream 则是一个并行执行的流,采用 Fo 香港云主机rkJoinPool 并行执行任务,提高执行速度。

下面我们看看2个简单的示例: 笔者最近在做一些爬虫相关的业务,其核心工具已开源 mica-http:https://gitee.com/596392912/mica/tree/master/mica-http,经过2个版本的迭代已经发展成了一个强大非账号爬虫利器,赶紧来试试吧。我们采集了大量的代理 ip 用来供爬虫使用,其中有个定时任务每 5 分钟去检测代理是否失效,代理 ip 检测比较费时,我们给每个检测的请求 设定了 2s 的超时,这样单线程的话 1000 个 ip 就得消耗半个多小时,当然笔者在校验的时候采用的 parallel Stream 简化开发。然后发现效果并不明显,代理 ip 数量上来之后 5 分钟完全检测不完,导致任务堆积。明明用了并发流为什么没有明显的提高执行速度呢?下面我们来看看刚刚的“示例”打印出的信息:我们可以看到 Parallel Stream,默认采用的是一个 ForkJoinPool.commonPool 的线程池,这样我们就算使用了 Parallel Stream, 整个 jvm 共用一个 common pool 线程池,一不小心就任务堆积了,在校验代理 ip 的时候我们还有采集代理等其他的任务中也大量使用了并发流, 这样也就印证了为什么会任务堆积了。使用自定义 ForkJoinPool 执行速度。示例代码如下:整个代码依然比较优雅,在使用自定义的 ForkJoin 线程池之后,执行速度有了明显的提升。以前 5 分钟执行不完的任务现在 2 分钟之内就能全部执行完毕。java8 的并发流在大批量数据处理时可简化多线程的使用,在遇到耗时业务或者重度使用并发流不妨根据业务情况采用自定义线程池来提示处理速度。
看完上述内容,你们对如何自定义ForkJoinPool提升并行流 ParallelStream执行速度有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: 电脑U盘显示0字节无法进行格式化怎么办

小编给大家分享一下电脑U盘显示0字节无法进行格式化怎么办,相信大部分人都还不 香港云主机怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法一:1.打开计算机管理界面,随后选择磁盘管理,电脑会显示系统所有…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/13 11:05
下一篇 08/13 11:05

相关推荐