是什么让Erlang不适合计算量大的工作?

f2uvfpb9  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(242)

在编程Erlang的开头,有以下内容:
Erlang为什么是你项目的最佳选择?这取决于你想构建什么。如果你想编写一个数字运算应用程序、图形密集型系统或运行移动的上的客户端软件,那么对不起,你买错书了。
隐含的信息是Erlang不适合计算量大的工作。是什么让Erlang如此不适合,还是我误解了?

vfhzx4xs

vfhzx4xs1#

Erlang在I/O绑定的应用程序中表现出色,也就是说,限制因素是I/O操作的延迟和吞吐量,而不是指令通过CPU管道的速率。Web服务器和数据库是I/O绑定的应用程序的很好例子:限制因素可能是磁盘和网络而不是CPU。传统的“计算密集型”应用程序包括加密工具和科学模拟。
至于为什么Erlang在处理计算密集型问题时无法与C和Fortran等语言相媲美,我们必须考虑代码生成和缓存友好性等问题......我将给予一下:

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

请记住,这只是冰山一角,我绝不是Erlang或语言实现方面的Maven。对于许多应用程序来说,它绝对是一种奇妙的语言。

  • HiPE可通过Debian中的erlang-base-hipe软件包获得,或从源代码tarball获得./configure --enable-hipe
dohp0rv5

dohp0rv52#

只是C代码在大多数情况下可能要快得多。Erlang在容错、分布式计算和并发性方面都很出色。程序员倾向于同样精通编写Erlang或其他语言,但如果你想要速度,可以使用C或C++,也许可以从Erlang端口,所以这段代码可以在你自己的Erlang应用程序中使用。

wsxa1bj1

wsxa1bj13#

Erlang是一种并发函数式编程语言,专为大型工业实时系统而设计。没有什么特别限制您开发“数字处理应用程序或图形密集型系统”,但该语言在实时事件处理方面表现出色。

相关问题