什么是冯·诺伊曼的瓶颈?

Chr*_*lis 1 functional-programming scala

什么是Von Neuman瓶颈以及函数式编程如何降低其影响?有人可以通过一个实用而全面的例子简单的方式解释,例如,显示使用Scala而不是Java的优势,如果有的话?

更重要的是,为什么要避免强制性控制结构,而选择如此重要的功能来提高性能呢?理想情况下,实际编码例子,说明如何解决的问题一个功能,没有一个是由冯-诺依曼瓶颈的影响将是非常有益的.

Dav*_*pik 7

即使您使用函数式编程,使用Scala也不一定能解决您的性能问题.

更重要的是,导致性能不佳的原因很多,如果没有分析,您就不知道正确的解决方案.

冯·诺依曼瓶颈是与事实是,在冯·诺依曼架构,CPU和内存是分开的,因此,CPU往往需要等待内存做.现代CPU通过缓存内存来解决这个问题.这不是一个完美的修复,因为它需要CPU正确猜测它需要缓存哪个内存.但是,高性能代码通过构建数据效率和线性迭代数据(即良好的数据局部性),使CPU很容易正确猜测.

Scala可以简化并行编程,这可能是您正在寻找的.这与冯诺依曼瓶颈没有直接关系.

即便如此,如果您想进行并行编程,Scala也不会自动成为答案.有几个原因.

  1. Java还具有并行编程能力,并且具有许多类型的并行集合用于此目的.
  2. Java 8 Streams是Java对Scala并行集合的回答.它们可用于函数式编程.
  3. 并行编程无法保证提高性能,并且由于设置成本的原因,可能会使小型数据集上的程序变慢.

有一种情况你是正确的,Scala克服了von Neumann瓶颈,这就是大数据.当数据无法轻松放入单台计算机时,您可以将数据存储在许多计算机上,例如Hadoop集群.Hadoop的分布式文件系统旨在将数据和CPU保持在一起,以避免网络流量.为Hadoop编程的最简单方法是使用Scala中的Apache Spark.以下是一些Spark示例 ; 从Spark 2.x开始,Scala示例比Java示例简单得多.