在Coursera课程-Scala中的函数式编程中-Martin Odersky讨论了von Neumann瓶颈如何限制命令式编程,因为它主要处理可变状态,因此还涉及赋值和取消引用。

冯·诺依曼瓶颈是处理器与内存之间读取/写入数据所涉及的延迟。

我正在努力理解两件事,并希望有人可以帮助您阐明一些事情:

  • 如果我们在编写Scala程序时仅使用不可变对象-那么在构造不可变对象并构造数据时仍然有赋值,但没有进一步的重新赋值。当我们想取消对不可变对象的引用时,仍然有可能它不再存在于缓存中,并且必须再次从主内存->延迟中获取。

    我正在努力了解使用不可变数据结构如何解决von Neumann瓶颈。有人可以帮助我欣赏一下这种情况吗?
  • 在他的课程演讲中,马丁·奥德斯基(Martin Odersky)在谈到冯·诺伊曼(von Neumann)瓶颈时说:

    命令式编程将程序逐字概念化,
    由于我们正在处理数据,因此成为可伸缩性的问题
    结构水平太低。函数式编程语言(以
    一般)倾向于专注于定义工作的理论和技术
    具有更高级别的抽象,例如collectionspolynomials
    documents

    我知道使用更高级别的抽象确实可以帮助开发人员扩展其开发工作的效率,但是抽象如何帮助解决冯·诺伊曼的瓶颈?
  • 最佳答案

    您需要阅读John Backs发表的原始论文“可以从冯·诺依曼风格中解放编程吗?一种功能风格及其程序代数”。
    它基本上讨论了两种瓶颈,一种是物理硬件限制,另一种是由于程序员对语言的思考而形成的概念性瓶颈。
    关于第二个问题。随着早期的语言越来越接近于相应的硬件实现,程序员认为曾经用来模仿事件的顺序流。函数式语言为我们提供了一种查看程序的新方法,其中程序对一组数据进行并行执行或操作。

    关于第一个问题
    我想迭代来自wiki.c2.com的评论

    “硬件上编程语言的选择是什么?被编译为在冯·诺依曼机器上运行的功能语言仍然会遇到瓶颈。”答案就是ReferentialTransparency,它使并行计算变得更加易于处理(并且能够实现自动化)。有效并行化命令性语言仍然是一个活跃的研究主题。

    http://wiki.c2.com/?CanProgrammingBeLiberatedFromTheVonNeumannStyle

    10-04 15:49