我是听一个马丁Odersky的视频最近在那里,他试图解释函数式语言的基本优势(如Scala中,但当然不一定斯卡拉)在面向对象的语言或过程语言。
套用,他解释说,摩尔定律正在失效最近我们,所以做出处理器“更快”,而不是能翻番的晶体管的核心数,CPU厂商只是提供更多的内核。这反过来借给CPU于被利用更充分地通过并行/多线程应用程序。所以初级带走是:越是同时它的代码的片段更是同时运行在不同的内核,并具有更多内核的应用程序的CPU,总体更快的程序执行的。
到目前为止,一切都很好。
他没有解释(或者更可能的,什么我没能把握)是为什么像斯卡拉函数式语言借给自己被更多的并发那么其他非功能性的语言。由于我们碰巧在谈论JVM的空间,让我们做的Java和Scala的快速比较。这是关于Scala程序,如果它是在纯Java,而不是付诸实施,将使其更难以并行/使并发,特别是如果其所有编译到JVM字节码,并与同机功能在同一个JVM上运行??
这意味着我有两个JVM的应用程序,应用1用Java编写的应用2 Scala编写的。他们都做同样的任务,完成同样的事情。都得到编译成JVM字节码,并在同一台计算机上安装了它在同一个JVM上跑。如何斯卡拉应用程序能够“点击进入” JVM功能,使其更适合于并发比Java一个(因此,更快的上它与更多核心的CPU)?
当你说你的两个应用程序的最终归结到对JVM字节码你是绝对正确的。大多数现有的Scala的并发库和框架也可用于Java。然而,设置斯卡拉身外之物是Scala的内置 的不变性支持。Scala有一个非常丰富的藏品不变拥抱永恒的这一特性使得它更容易编写代码并发和并行应用程序。斯卡拉从抽象写线程级代码的用户,并让用户更专注于业务逻辑。期货API在这是非常方便的。
斯卡拉拥抱函数式编程范式(即排版功能),然后将可变国家行为体中,通过它可以消除所有的典型的并发问题,你会在Java中,如:编程线程运行到。这就是为什么斯卡拉被选为语言来设计的火花。
现在来到你的问题的主要部分,以相对于其他非功能性语言的Scala如何利用更多的内核: - 斯卡拉期货API有这只不过是一个线程池,它是由开发人员配置的潜在执行上下文。使用这个API,你将能够把所有的核心优势。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句