Von Neuman的瓶颈是什么?函数式编程如何降低其影响?有人可以通过简单的方式通过实用且全面的示例来解释,例如,显示使用Scala而不是Java的优势,如果有的话?
更重要的是,为什么要避免强制性控制结构,而选择功能如此重要以提高性能?理想情况下,一个实际的编码示例解释了问题如何解决 一个函数而没有一个受到Von Neuman瓶颈的影响将会非常有帮助。
答案 0 :(得分:7)
即使您使用函数式编程,使用Scala也不一定能解决您的性能问题。
更重要的是,导致性能不佳的原因很多,如果没有分析,你就不会知道正确的解决方案。
von Neumann Bottleneck与冯·诺依曼架构中的CPU和内存是分开的事实有关,因此CPU经常需要等待内存。现代CPU通过缓存内存来解决这个问题。这不是一个完美的修复,因为它需要CPU正确猜测它需要缓存哪个内存。但是,高性能代码通过构造数据效率和线性迭代数据(即良好data locality),使CPU很容易正确猜测。
Scala可以简化并行编程,这可能是您正在寻找的。这与冯诺依曼瓶颈没有直接关系。
即使如此,如果你想进行并行编程,Scala也不会自动得到答案。这有几个原因。
有一种情况你是正确的,Scala克服了von Neumann瓶颈,那就是大数据。当数据不容易在一台机器上运行时,您可以将数据存储在许多机器上,例如Hadoop集群。 Hadoop的分布式文件系统旨在将数据和CPU保持在一起以避免网络流量。为Hadoop编程的最简单方法是使用Scala中的Apache Spark。这里有一些Spark examples;从Spark 2.x开始,Scala示例比Java示例简单得多。