gpt4 book ai didi

erlang - 是什么让 Erlang 不适合计算昂贵的工作?

转载 作者:行者123 更新时间:2023-12-03 23:07:07 25 4
gpt4 key购买 nike

在编程 Erlang 的开头,有以下内容:

What makes Erlang the best choice for your project? It depends on what you are looking to build. If you are looking into writing a number-crunching application, a graphics- intensive system, or client software running on a mobile handset, then sorry, you bought the wrong book.



隐含的信息是 Erlang 不适合计算成本高的工作。是什么让 Erlang 如此不合适,还是我误解了?

最佳答案

Erlang 在 I/O 密集型应用程序中大放异彩,也就是说,限制因素是 I/O 操作的延迟和吞吐量而不是指令可以通过 CPU 管道推送的速率的问题。 Web 服务器和数据库是受 I/O 限制的应用程序的好例子:限制因素可能是磁盘和网络而不是 CPU。传统的“计算密集型”应用程序包括加密工具和科学模拟。

至于为什么 Erlang 在涉及计算密集型问题时无法匹配 C 和 Fortran 等语言,我们必须考虑代码生成和缓存友好性之类的事情......我会尝试一下:

  • 代码生成 : 通常当你启动一个 Erlang 程序时,它会在 BEAM 中运行,一个 virtual machine基于 threaded code .虽然 BEAM 对大多数用途来说都足够好,但它每个逻辑“指令”的开销比现代优化 C 编译器生成的代码类型要大得多。 HiPE 项目为 Erlang 提供了一个本地代码编译器,几年前该编译器已集成到主 OTP 源代码树中*。虽然它确实提高了 Erlang 的数字处理能力,但它仍然很难与编写良好的 C 或 Fortran 程序相匹配。
  • 缓存友好性 :内存系统是现代计算机的主要瓶颈:从主内存读取可能需要数百个处理器周期!为了解决这个问题,CPU 设计者引入了几个级别的缓存来隐藏内存延迟。缓存利用了计算机程序的两个关键特性:时间和空间局部性——也就是说,最近被引用的内存区域(和附近的区域)可能会再次被引用。像 C 和 Fortran 这样的语言提供了对内存分配位置和方式的大量控制,使程序员能够调整算法以很好地与缓存配合使用。对于像 Erlang 这样的动态语言,通常情况并非如此,其中内存分配对程序员隐藏并由虚拟机自动处理。
  • 代码大小 :关于空间局部性的论点也适用于代码; Erlang 代码,无论是 native 形式还是字节码形式,通常都会比相应的编译后的 C 代码大。这会导致指令缓存中更频繁的未命中。

  • 请记住,这只是冰山一角,我绝不是 Erlang 或语言实现方面的专家。不过,不要让 Erlang 可能永远不会运行科学模拟的事实吓到你;对于许多应用程序来说,它绝对是一种奇妙的语言。

    *HiPE 可通过 Debian 中的 erlang-base-hipe 软件包获得,或 ./configure --enable-hipe来自源 tarball。

    关于erlang - 是什么让 Erlang 不适合计算昂贵的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214336/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com