使用Erlang生成多个外部进程

elm*_*lmt 1 erlang performance process wrapper

当我踏上Erlang美妙世界的旅程时,我注意到它的美丽,但更重要的是我注意到它的速度.这让我很奇怪,因为Erlang非常善于生成轻量级进程,所以将它用作其他进程的包装是否有意义.

作为一个例子,我使用rspec为ruby编写测试.假设我有10,000个测试,所有测试都可以独立运行而没有任何问题.是否有意义使用Erlang生成10,000个rspec并同时运行每个测试而不是rspec顺序运行每个测试?或者这只是一个完全荒谬的想法?

Sam*_*vas 6

您正在将erlang进程与OS进程混淆.erlang VM在OS进程中运行,解释并运行erlang程序(在beam文件中编译).当erlang程序调用spawn或spawn_linkVM创建将由内部VM调度程序运行的内部进程时.操作系统对这些过程一无所知.

但是,当一个erlang程序产生一个端口(在你的情况下运行外部程序的常用方法,如ruby解释器)时,它会在VM外部创建一个新的OS进程.该外部进程使用标准输入输出与VM通信.如果您在系统中看到进程,您会注意到有一个波束进程(erlang VM)和一个ruby进程.

因此,与通过任何其他方式(手动,在shell脚本等中)启动它们相比,从erlang VM启动OS进程不会有任何区别