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

时间:2016-11-22 19:56:37

标签: scala functional-programming

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

更重要的是,为什么要避免强制性控制结构,而选择功能如此重要以提高性能?理想情况下,一个实际的编码示例解释了问题如何解决 一个函数而没有一个受到Von Neuman瓶颈的影响将会非常有帮助。

1 个答案:

答案 0 :(得分:7)

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

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

von Neumann Bottleneck与冯·诺依曼架构中的CPU和内存是分开的事实有关,因此CPU经常需要等待内存。现代CPU通过缓存内存来解决这个问题。这不是一个完美的修复,因为它需要CPU正确猜测它需要缓存哪个内存。但是,高性能代码通过构造数据效率和线性迭代数据(即良好data locality),使CPU很容易正确猜测。

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

即使如此,如果你想进行并行编程,Scala也不会自动得到答案。这有几个原因。

  1. Java也能够进行并行编程,并且为此目的有许多类型的并行集合。
  2. Java 8 Streams是Java对Scala并行集合的回答。它们可用于函数式编程。
  3. 并不保证并行编程可以提高性能,并且由于设置成本的原因,可能会使小型数据集上的程序变慢。
  4. 有一种情况你是正确的,Scala克服了von Neumann瓶颈,那就是大数据。当数据不容易在一台机器上运行时,您可以将数据存储在许多机器上,例如Hadoop集群。 Hadoop的分布式文件系统旨在将数据和CPU保持在一起以避免网络流量。为Hadoop编程的最简单方法是使用Scala中的Apache Spark。这里有一些Spark examples;从Spark 2.x开始,Scala示例比Java示例简单得多。