java线程池并发_线程池之外:Java并发并不像您想象的那样糟糕

java线程池并发

并发

Apache Hadoop,Apache Spark,Akka,Java 8流和Quasar: 针对Java开发人员的经典用例以及最新的并发方法

关于并发性更新概念的讨论很多,但是许多开发人员还没有机会将他们的想法缠住。 在本文中,我们将介绍您需要了解的有关Java 8流,Hadoop,Apache Spark,Quasar光纤和Reactive编程方法的所有知识,并帮助您始终处于循环状态,尤其是当您不使用它们时。定期地 这不是未来,这正在发生。

我们在这里处理什么?

在谈论并发时,表征当前问题的一种好方法是回答一些问题,以更好地理解它:

  1. 这是数据处理任务吗? 如果是这样,是否可以将其分解为独立的工作?
  2. 操作系统,JVM和您的代码之间有什么关系? (本机线程与轻量级线程)
  3. 涉及多少台机器和处理器? (单核与多核)

让我们仔细研究每种方法,找出每种方法的最佳用例。

1.从线程池到并行流

单台机器上的数据处理,让Java负责线程处理

在Java 8中,我们已经引入了新的Stream API,该API允许对数据流应用聚合操作,例如Filter,Sort或Map。 当应用.parallelStream()时,流还允许在多核计算机上进行并行操作-使用Java 7中引入的Fork / Join框架在线程之间拆分工作。这是Java 6 java.util.concurrency库的改进,我们在其中遇到了ExecutorService创建并处理我们的工作线程池。

Fork / Join也建立在ExecuterService之上,与传统线程池的主要区别在于它们如何在线程之间分配工作,从而实现多核机器支持。 使用简单的ExecuterService,您可以完全控制工作线程之间的工作负载分配,确定线程要处理的每个任务的大小。 另一方面,在使用Fork / Join的情况下,有一种工作窃取算法可以抽象化线程之间的工作负载处理。 简而言之,这允许将大型任务划分为较小的任务(分叉),并在不同的线程中进行处理,最终合并结果–平衡线程之间的工作。 但是,这不是灵丹妙药。

有时并行流甚至可能使您放慢速度,因此您需要仔细考虑。 添加.parallelStream()到你的方法可能会导致瓶颈和怠工(约15%的速度较慢这一基准,我们跑),精线经过的线程数。 假设我们已经在运行多个线程,并且在其中一些线程中使用了.parallelStream(),从而向池中添加了越来越多的线程。 这很容易变成我们的核心无法处理的事情,并且由于上下文切换的增加而减慢了一切。

底线:并行流以一种在内核之间分配工作负载的方式抽象处理一台计算机上的线程。 但是,如果您想有效地使用它们,那么一定要记住硬件,不要产生超出计算机处理能力的线程。

2. Apache Hadoop和Apache Spark

重型起重:多台机器上的大数据处理

转移到多台机器,数PB的数据和类似于从推特或重型机器学习算法中提取所有提及Java的推文的任务。 在谈到Hadoop时,必须采取进一步的措施并考虑更广泛的框架及其组件:Hadoop分布式文件系统(HDFS),资源管理平台(YARN),数据处理模块(MapReduce)以及其他库和实用程序,这一点很重要。 Hadoop(通用)所需。 在这些工具之上还有其他可选工具,例如在HDFS(HBase)之上运行的数据库,查询语言(Pig)的平台以及数据仓库基础结构(Hive)等。

这是Apache Spark介入的一个新数据处理模块,以其内存性能和快速执行的弹性分布式数据集(RDD)的使用而闻名,这与不使用内存(和内存)的Hadoop MapReduce不同。磁盘)操作。 Databricks发布的最新基准测试表明,在对PB级数据进行排序时,Spark比Hadoop 快3倍 ,而使用的节点少10倍

Hadoop大象

Hadoop的经典用例是查询数据,而Spark以其快速的机器学习算法运行时间而闻名。 但这只是冰山一角,正如Databricks所说: “ Spark使Hadoop集群中的应用程序在内存中的运行速度提高了100倍,甚至在磁盘上运行时也提高了10倍”

底线: Spark是Hadoop生态系统中的新后起之秀。 有一个普遍的误解,就是我们谈论的是无关或竞争的事物,但是我相信我们在这里看到的是框架的演变。

3.类星体纤维

将本地线程中断为虚拟轻量级线程

我们有机会在Hadoop中运行,现在回到单机上。 实际上,让我们比标准多线程Java应用程序进一步放大,并专注于一个单线程。 就我们而言,HotSpot JVM线程与本机OS线程相同,仅保留一个线程并在其中运行“虚拟”线程就可以了。 Java没有本机光纤支持,但不用担心, Parallel Universe的Quasar吸引了我们。

Quasar是一个开放源代码JVM库,它支持光纤(也称为轻量级线程),并且还充当Actor框架,我将在后面提到。 上下文切换是这里的游戏名称。 由于我们受到内核数量的限制,因此当本机线程数增加时,我们将面临越来越多的上下文切换开销。 解决这一问题的一种方法是使用支持“多线程”的单线程的光纤。 看起来像是threadcepiton的情况。

光纤也可以看作是线程池的演进,它规避了并行流所带来的线程过载的危险。 它们使扩展线程变得更容易,并允许大量并发的“轻”线程。 它们无意替代线程,而应用于相对频繁阻塞的代码,就像它们充当真正的异步线程一样。

底线: Parallel Universe正在Java中提供一种新的并发方法,尚未达到v1.0,但绝对值得一试。

4.演员和React式编程

使用Java处理并发的其他模型

在“ React式宣言”中 ,以4条原则描述了新机芯:响应,弹性,弹性和消息驱动。 这基本上意味着快速,容错,可扩展并且支持无阻塞通信。

让我们看看Akka演员如何支持这一点。 为简化起见,将Actor视为具有某种状态和某种行为的人,通过交换发送到彼此邮箱的消息进行交流。 应该为每个应用程序创建一个Actor系统,该系统具有将任务分解为较小任务的层次结构,以便每个Actor最多只有一个监督Actor。 演员可以处理任务,通过委托其他演员进一步分解事件,或者在失败的情况下,将其上报给主管。 无论哪种方式,消息都不应包含行为或共享可变状态,每个Actor都具有独立的声明和自己的行为。

与大多数开发人员习惯的并发模型相比,这是一种范式转变。 这与我们在这里讨论的前3个主题的发展有些偏离。 尽管它的起源可以追溯到70年代,但直到最近几年它才受到关注,并得到了复兴,以更好地适应现代应用程序的需求。 Parallel Universe的Quasar还基于轻量级线程支持Actor。 实施方面的主要区别在于纤维/轻质纱线。

底线:采用Actor模型可以轻松管理线程池,而将其留给工具箱。 兴趣的复兴来自当今应用程序要处理的问题,即高度并发的系统,我们可以使用更多的内核。

结论

我们已经通过4种方法使用并发或并行算法来解决问题,并且采用了最有趣的方法来应对当今的挑战。 希望这有助于激起您的兴趣,并更好地了解当今并发的热门话题。 超越线程池的趋势是,负责任地将其委派给该语言及其工具-将开发资源集中在提供新功能上,而不是花费大量时间解决竞争条件和锁定问题。

翻译自: https://www.javacodegeeks.com/2014/11/beyond-thread-pools-java-concurrency-is-not-as-bad-as-you-think.html

java线程池并发

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

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

相关文章

网络营销理论模型_网络营销:课堂笔记(第四章下)

网络营销产品策略(续上篇)本章知识清单三、网络品牌如何打造?什么是品牌目前为止,对品牌的含义一直没有一个统一的、权威的解释。如果从品牌的构成要素和基本功能方面来界定品牌的话,最具有代表性和最经典的表述当属美国市场营销协会的定义。…

ios多线程Android,iOS 关于多线程

一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如:同时打开QQ,Xcode,系统就会分别启动2个进程通过”活动监视器”可以查看Mac系统中所开启…

websockets_使用用户名/密码和Servlet安全性保护WebSockets

websocketsRFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的,其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们来谈谈协议本身内置的一些安全性: HTTP请求中的Origin头仅包含标识发起该请求的主体&…

android横向排列 间隙,Android开发消除横向排列的多个Button之间的空隙

一.问题重述摘要里描述的可能不太清楚,问题如下图:如何消除Button1和Button2之间的空隙,以及Button与左右边界之间的空隙?二.问题根源这里出现的空隙其实是Button的背景图片中的透明部分,如下图:(两个按钮被…

电脑的发展史_互联网发展史 硅谷传奇之 IBM

2节 硅谷传奇之 IBM为什么要讲IBM呢?互联网是因计算机而诞生的,互联网的发展史与电脑的发展史有很多是重叠的,而IBM是上世纪60年代八大电脑公司之首。在互联网席卷全球之前,在硅谷是以无线电、军事技术、硅晶体管而闻名的。这些东…

android汉字田字格,画一个简单的田字格

image.png上代码package com.nick.customview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.support.annotation.Nullable;import android.sup…

xp定时关机软件_好用又免费的电脑定时工具,不用得后悔

现在利用电脑办公的人有多少,举个手示意下!!!给电脑设置定时关机,可以方便我们不在电脑前完成关机操作。那么,如何设置定时关机呢?如果要取消,定时关机又如何取消?有的人…

apache camel_Apache Camel请向我解释这些端点选项的含义

apache camel在即将发布的Apache Camel 2.15中,我们使Camel更智能。 现在,它可以充当老师,并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解…

android照片备份软件下载,照片备份云相册app下载-照片备份云相册下载V1.9安卓版-西西软件下载...

这款软件主要为安卓手机用户提供照片图片等备份的服务,通过照片备份云相册app可以轻松的为更多手机空间不够的用户清理出手机空间,照片图片等的是最不容易发现占用空间的,现在有了照片备份云相册app就能轻松让手机内存足够使用哦。照片备份云…

手机照片导入电脑步骤_如何将手机中的照片、视频快速的保存到U盘上?3分钟教你详细步骤...

手机拍照功能是越来越强大了。生活中,不少的朋友都喜欢拍照。拍着拍着不知不觉就存了许多的照片,占用很大的空间。手机照片和视频都是我们非常重要的回忆,许多人都不愿意删除。为了节省我们手机的空间,许多人都会选择将手机照片导…

筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份

筒仓计算表格分析公司Quocirca的最新研究证实,现在许多企业的外部用户比内部用户更多:在欧洲,有58%的企业直接与其他企业和/或消费者的用户进行交易; 仅在英国,这一数字就达到了65%。 如果回顾历…

C/C 宏替换详解

1. 基本形式#define name replacement_text 复制代码通常情况下,#define 指令占一行,替换文本是 define 指令行尾部的所有剩余部分,但也可以把一个较长的宏定义分成若干行,这时需要在待续的行末尾加上一个反斜杠符 。宏定义也可以…

win10更新助手_快升级!win10精简版不到10G,比win7还干净流畅,无需更新!

在整个PC端操作系统中,最成功的得主自然要说微软。毕竟微软发布的XP、win7操作系统那可是风靡全球,占用的用户资源十分庞大。单单因为这两个操作系统就吸引到了足够的用户,整个装机下载量可真不是盖的,说微软是PC端的"老大&q…

openshift命令_使用命令行工具创建WildFly OpenShift应用程序

openshift命令通过使用快速入门,可以轻松地在OpenShift上配置WildFly的新实例。 只需单击一下,您就可以准备就绪! 通常,OpenShift的高级用户使用命令行工具 。 但是,您无法使用CLI工具创建WildFly墨盒。 但现在已解决…

redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现

推荐学习分布式大全:反向代理/Redis/中间件/MySQL/消息,挑战阿里P7必备都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”微服务架构之春招总结:SpringCloud、Docker、Dubbo与SpringBoot一、基本概况为什么使…

C 实现高性能内存池

版权一、概述在 C/C 中,内存管理是一个非常棘手的问题,我们在编写一个程序的时候几乎不可避免的要遇到内存的分配逻辑,这时候随之而来的有这样一些问题:是否有足够的内存可供分配? 分配失败了怎么办? 如何管理自身的内存使用情况…

docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料SentinelNacos 是微服务环境搭建必不可少的两个组件,这里给大家推荐一套微服务教程:SpringCloud微服务电商项目教程…

flyme Android7.0 root,手把手教你如何免ROOT卸载Flyme7系统自带APP

本教程需要使用adb,adb的全称为Android Debug bridge,就是起到调试桥的作用。借助adb工具,我们可以管理设备或手机模拟器的状态。本教程需要使用adb,adb的全称为Android Debug bridge,就是起到调试桥的作用。借助adb工…

C语言 -- 字符串中根据特定字符(串)分割

版权C语言字符串操作函数有很多,这里举出需要用到的,其他请自行查找。1、len strlen(p) ;//取字符串长度 原型:size_t strlen(const char *s); 功能:统计字符串string中字符的个数,字符串的长度在 size_t…

javaone_JavaOne 2014:会议与合同利益冲突

javaone杜克街咖啡馆,工程师可以在街上进行走廊交谈 。 与签约不兼容 我的第11届JavaOne会议(2004年至2014年为11 10 1)非常出色。 值得参加此活动并结识社区中所有的人。 现在,这里是绅士的,但 。 除了经济上的明显…