热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Scala如何利用更多内核而不是Java或其他非功能语言?

如何解决《Scala如何利用更多内核而不是Java或其他非功能语言?》经验,为你挑选了1个好方法。

我最近正在收听Martin Odersky的视频,他试图解释功能语言(例如Scala,当然不一定是 Scala)的基本优势,而不是 OOP或程序语言.

他解释说,摩尔定律最近使我们失败,因此为了使处理器"更快",而不是能够使核心中的晶体管数量增加一倍,CPU制造商只是提供更多核心.这反过来又使CPU可以通过并发/多线程应用程序更充分地利用CPU.因此主要的用处是:应用程序并发的越多,其代码的更多代码段在不同的内核上同时运行,并且CPU上的内核越多,程序执行的总体速度就越快.

到现在为止还挺好.

他未能解释的(或者更可能的是,我没有掌握的内容)是为什么像Scala 这样的函数式语言能够使其与其他非函数式语言更加并发.由于我们碰巧讨论的是JVM空间,让我们快速比较Java和Scala.什么是Scala程序,如果它是用纯Java实现的,会使并行化/并发化更加困难,特别是如果它全部编译为JVM字节码并在具有相同本机功能的相同JVM上运行?

意思是我有两个JVM应用程序,用Java编写的App1和用Scala编写的App2.他们都完成相同的任务并完成相同的任务.两者都被编译为JVM字节码,并在安装了相同JVM的同一台计算机上运行.Scala应用程序如何"利用"JVM功能使其更适合并发性而不是Java(因此,在具有更多内核的CPU上更快)?



1> Chaitanya Wa..:

当你说你的两个应用程序最终归结为JVM上的字节代码时,你是完全正确的.Scala可用于并发的大多数库和框架也可用于Java.然而,让Scala与众不同的是Scala内置的 对不变性的支持.Scala具有非常丰富的不可变集合,并且这种包含不变性的特性使得为并发和并行应用程序编写代码变得更加容易.Scala将用户从编写线程级代码中抽象出来,并让用户更专注于业务逻辑.期货API在此期间非常方便.

Scala包含函数式编程范例(即组合函数)并在actor中隔离可变状态,通过它可以消除您将遇到的所有典型并发问题,例如在Java中编写线程.这就是Scala被选为设计Spark的语言的原因.

现在,关于scala如何利用更多内核与其他非函数语言相比,你的问题的主要部分是: - scala中的Futures API有一个底层执行上下文,它只是一个可由开发人员配置的线程池.使用此API,您将能够利用所有核心.


@hotmeatballsoup你错过了这一点.Odersky没有声称Scala代码比等效的Java代码更快,这可能是荒谬的.他提出了更为可靠的主张*并行代码比顺序代码更快*(不是很有争议),并且它更容易在函数式语言中编写并行代码*.因此,Scala比Java更快,因为不可变性和更好的并发构造使编写快速代码变得更容易,而不是因为等效代码更快.
@hotmeatballsoup我没有数字来评论Java和Scala应用程序的执行时间.但是,如果您坐下来编写相同的代码来实现并行性和并发性,那么与Scala相比,开发人员用Java编写它会变得非常棘手.
推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 线程漫谈——线程基础
    本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必 ... [详细]
  • java线程池的实现原理源码分析
    这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
author-avatar
哆啦356
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有