从并发角度看Java v Scala

我现在正在开始我的最后一年项目.我将从java和scala的角度研究并发方法.从Java并发模块出来后,我可以看到人们为什么说共享状态线程方法难以推理.由于java线程运行的非确定性方式,您需要担心关键部分,冒着竞争条件和死锁等风险.在1.5中,这种推理得到了一些清晰度,但仍然非常清晰.

在第一个视图中,scala似乎通过actors类删除了这种复杂的推理.这使程序员能够从更顺序的角度开发并发系统,并且更容易概念化.但是,对于这种积极的一面,我是否正确地说有一些缺点?例如,假设我们想在两种情况下对大型列表进行排序 – 使用java创建两个线程将列表拆分为两个,担心关键部分,原子操作等并转到代码.使用scala,因为它“无分享”你实际上必须将list / 2传递给两个actor以执行排序操作,对吗?

我想我的问题是你为更简单的推理付出的代价是在scala中必须将集合传递给你的演员的性能开销吗?

我正在考虑对这种效果做一些基准测试(选择排序,快速排序等;)但是因为一个是功能性的而且一个是必要的 – 我不会从算法的角度比较苹果和苹果.

我真的很感激你们上面提到的任何观点给我一些想法让我开始.
非常感谢.

解决方法:

Scala的优点在于,如果需要,可以使用Java方式进行并发.所有Java类都可用.

因此,它实际上归结为一个模型与模块之间的区别,在模型中,线程具有对可变变量的并发访问权限,而模型中有有状态的actor,它们彼此发送消息但不会窥视彼此的内部.而且你绝对正确,在某些情况下你必须权衡性能,以便轻松获得正确的代码.

我通常会发现,作为一个粗略的经验法则,如果你要花费大量时间等待锁打开,使用Java模型,并且没有干净的方法来分离工作为了避免每个人都在等待该资源,并且如果执行在线程之间快速切换,那么Java模型远远优于演员模型,其中演员将“我已完成”的消息发送回主管,然后主管发送出去“这是新作品!”消息给现有的非忙碌演员.排序算法,取决于您如何设想它们,可以非常属于这一类.

对于大多数其他事情而言,与演员相关的表现损失并不像我所见.如果你可以把你的问题想象成很多很多被动元素(即他们只有在收到消息时才需要时间),那么演员可以特别好地扩展(数百万可用,但只有少数可以在任何特定时刻工作) ;对于线程,你需要有一些额外的内部状态来跟踪谁应该做什么工作,因为你无法处理那么多活动线程.

原文地址:https://codeday.me/bug/20190730/1579317.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 TwemojiTwemoji是Twitter开源的其完整的Emoji表情图片。开发者可以去GitHub下载完整的表情库,并把这些表情加入到自己的应用或网页中。使用示例:var i = 0;twemoji.parse(  ’emoji, m\u276
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即两个对象在内存中的首地址;equals比较字符串中所包含的内容是否相同。publicstaticvoidmain(String[]args){​ Strings1="abc"; Strings2=newString("abc");​ System.out.println(s1==s2)
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala怎么使用”吧!语法scala...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相信很多人在Scala是一种什么语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相信很多人在Scala Trait怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日常操作中,相信很多人在Scala类型检查与模式匹配怎么使用问题上存在疑惑,小编查阅了各式资料,整理...
这篇文章主要介绍“scala中常用但不常见的符号有哪些”,在日常操作中,相信很多人在scala中常用但不常见的符号有哪些问题上存在疑惑,小编查阅了各式资料,整理...
本篇内容主要讲解“Scala基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala基础知识有哪些”...
本篇内容介绍了“scala基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
本篇内容介绍了“Scala下划线怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
本篇内容主要讲解“Scala提取器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala提取器怎么使用”...
这篇文章主要讲解了“Scala基础语法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala基础语法有...
本篇内容主要讲解“Scala方法与函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala方法与函数怎...
这篇文章主要讲解了“scala条件控制与循环怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scala条...
这篇文章主要介绍“scala函数怎么定义和调用”,在日常操作中,相信很多人在scala函数怎么定义和调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操
这篇文章主要介绍“scala如何声明变量”,在日常操作中,相信很多人在scala如何声明变量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
这篇文章主要讲解了“scala的Map和Tuple怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scala的Ma...
这篇文章主要介绍“scala的隐式参数有什么作用”,在日常操作中,相信很多人在scala的隐式参数有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
本篇内容主要讲解“Scala怎么进行文件写操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala怎么进行文件...
这篇文章主要讲解了“Scala怎么声明数组”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala怎么声明数组...