是什么使Erlang不适合计算成本高昂的工作?

是什么使Erlang不适合计算成本高昂的工作?,erlang,Erlang,在Erlang编程的开始,有以下内容: 什么使Erlang成为您项目的最佳选择?这取决于你在看什么 建造。如果您正在考虑编写一个数字处理应用程序,那么图形- 密集型系统,或运行在手机上的客户端软件,那么很抱歉,您 买错了书 隐含的信息是,Erlang不适合计算量大的工作。是什么让Erlang如此不合适,或者我误解了它?只是C代码在大多数情况下可能要快得多。Erlang非常擅长容错、分布式计算和并发。程序员往往同样擅长编写Erlang或其他语言,但是如果你想要速度,使用C或C++,可能来自Erla

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

什么使Erlang成为您项目的最佳选择?这取决于你在看什么 建造。如果您正在考虑编写一个数字处理应用程序,那么图形- 密集型系统,或运行在手机上的客户端软件,那么很抱歉,您 买错了书


隐含的信息是,Erlang不适合计算量大的工作。是什么让Erlang如此不合适,或者我误解了它?

只是C代码在大多数情况下可能要快得多。Erlang非常擅长容错、分布式计算和并发。程序员往往同样擅长编写Erlang或其他语言,但是如果你想要速度,使用C或C++,可能来自Erlang端口,所以这个代码可以从你自己的Erlang应用程序使用。

Erlang是一个为大型工业实时系统编程而设计的并发功能编程语言。没有什么特别阻止您开发“数字处理应用程序或图形密集型系统”,但该语言在实时事件处理方面大放异彩。

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

至于为什么Erlang在计算密集型问题时无法匹配C语言和FORTRAN语言,我们必须考虑代码生成和缓存友好等问题。我来试试:

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


*HiPE可以通过Debian中的erlang base HiPE包获得,或者从源tarball中启用HiPE;比如说,Erlang的强套件不是数值算法。为此,您应该使用C/Fortran/etc。这是因为在计算方面,有些东西比Erlang更好。Erlang仍然进行计算,如果一个计算问题可以并行化,Erlang甚至可以表现得更好。好文章!简而言之,性能最大化是“您离正在编程的机器越近,您可以越快完成编程,因为每个逻辑指令可以增加更少的开销。”感谢您的好话和一个很好的总结!