加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从并发角度看Java v Scala

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

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

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

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

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

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读