当我踏上Erlang美妙的世界之旅时,我注意到它的美丽,但更重要的是我注意到它的速度。这让我想知道,因为Erlang非常擅长产生轻量级进程,所以将它用作其他进程的包装是否有意义。
作为一个例子,我使用rspec为ruby编写测试。假设我有10,000个测试,所有测试都可以独立运行而没有任何问题。是否有意义使用Erlang生成10,000个rspec并同时运行每个测试而不是rspec顺序运行每个测试?或者这只是一个完全荒谬的想法?
答案 0 :(得分:6)
您正在将erlang进程与OS进程混淆。 erlang VM在OS进程中运行,解释并运行erlang程序(在beam文件中编译)。当erlang程序调用{{1}}或spawn
时,VM会创建一个内部进程,该进程将由内部VM调度程序运行。操作系统对这些过程一无所知。
但是,当一个erlang程序产生一个端口(在你的情况下运行外部程序的常用方法,如ruby解释器)时,它会在VM外部创建一个新的OS进程。该外部进程使用标准输入输出与VM通信。如果您在系统中看到进程,您会注意到有一个波束进程(erlang VM)和一个ruby进程。
所以从erlang VM启动操作系统进程与通过任何其他方式(手动,在shell脚本等)启动它们相比没有任何区别
答案 1 :(得分:2)
我猜测rspecs是重量级进程,在这种情况下,其中10,000个将使任何操作系统瘫痪,即使它们被“包裹”在Erlang进程中。 Erlang的进程并不是操作系统意义上的真正进程,并且它们不能将正常的OS进程与其“神奇”属性相提并论。他们只是要求操作系统产生这个过程。