为什么说Scala的杠杆作用更多的内核,而不是Java或其他非功能性的语言吗?

hotmeatballsoup:

我是听一个马丁Odersky的视频最近在那里,他试图解释函数式语言的基本优势(如Scala中,但当然不一定斯卡拉)在面向对象的语言或过程语言。

套用,他解释说,摩尔定律正在失效最近我们,所以做出处理器“更快”,而不是能翻番的晶体管的核心数,CPU厂商只是提供更多的内核。这反过来借给CPU于被利用更充分地通过并行/多线程应用程序。所以初级带走是:越是同时它的代码的片段更是同时运行在不同的内核,并具有更多内核的应用程序的CPU,总体更快的程序执行的。

到目前为止,一切都很好。

他没有解释(或者更可能的,什么我没能把握)是为什么像斯卡拉函数式语言借给自己被更多的并发那么其他非功能性的语言。由于我们碰巧在谈论JVM的空间,让我们做的Java和Scala的快速比较。这是关于Scala程序,如果它是在纯Java,而不是付诸实施,将使其更难以并行/使并发,特别是如果其所有编译到JVM字节码,并与同机功能在同一个JVM上运行?

这意味着我有两个JVM的应用程序,应用1用Java编写的应用2 Scala编写的。他们都做同样的任务,完成同样的事情。都得到编译成JVM字节码,并在同一台计算机上安装了它在同一个JVM上跑。如何斯卡拉应用程序能够“点击进入” JVM功能,使其更适合于并发比Java一个(因此,更快的上它与更多核心的CPU)?

切塔尼亚Waikar:

当你说你的两个应用程序的最终归结到对JVM字节码你是绝对正确的。大多数现有的Scala的并发库和框架也可用于Java。然而,设置斯卡拉身外之物是Scala的内置 的不变性支持Scala有一个非常丰富的藏品不变拥抱永恒的这一特性使得它更容易编写代码并发和并行应用程序。斯卡拉从抽象写线程级代码的用户,并让用户更专注于业务逻辑。期货API在这是非常方便的。

斯卡拉拥抱函数式编程范式(即排版功能),然后将可变国家行为体中,通过它可以消除所有的典型的并发问题,你会在Java中,如:编程线程运行到。这就是为什么斯卡拉被选为语言来设计的火花。

现在来到你的问题的主要部分,以相对于其他非功能性语言的Scala如何利用更多的内核: - 斯卡拉期货API有这只不过是一个线程池,它是由开发人员配置的潜在执行上下文。使用这个API,你将能够把所有的核心优势。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么其他语言(而不是Java)不是平台无关的?

结合杠杆作用Plots()

Fortran是纯功能性语言吗?

为什么Const实例的<*>接受两个非功能性值?

为什么在MongoDB或CouchDB中使用Javascript而不是Java,C ++等其他语言?

为什么我们说依赖注入是 Java Spring 框架的特性,而不是 Java 语言的特性?

在Scala中编写更多“功能性”代码以使用不可变集合

使用功能性Java项目有什么经验?

功能性Java:P1是什么?

如何以功能性编程语言使用函数而不是提前返回

将功能性JSX组件与其他功能包装在一起

重写Scala代码以提高功能性

功能性Java BaconJS,如何将更多的值推送到事件流?

什么是便携性?Java如何比其他语言更具移植性?

为什么在非数学或其他语言中的SQL中为null * 0 = null

功能性Java 8与传统Java

功能性JavaScript:闭包和递归。为什么会失败?

为什么Java语言环境不是常量?

识别和删除具有高杠杆作用和大量残差的数据点

Windows为什么不使用其他CPU内核?

Java开发人员为什么要学习其他JVM语言?

功能性解决方案,而不是迭代式

奇怪的SQLite行为-非功能性UPDATE SQLite方法

为什么我的功能无法识别我的其他功能?

火炬:为什么此整理功能比其他功能更快?

为什么Clojure比其他JVM语言更可热插拔?

为什么我的压延机使用其他语言?

为什么Lisp使用gensym而不使用其他语言?

命令性语言相对于功能性语言的不变性