Process 使用Erlang生成多个外部进程

Process 使用Erlang生成多个外部进程,process,erlang,performance,wrapper,Process,Erlang,Performance,Wrapper,当我在二郎奇妙的世界中旅行时,我注意到了它的美丽,但更重要的是,我注意到了它的速度。这让我想知道,既然Erlang非常擅长生成轻量级进程,那么使用它作为其他进程的包装器是否有意义呢 作为一个例子,我用它来为ruby编写测试。假设我有10000个测试,所有测试都可以独立运行,没有问题。使用Erlang spawn 10000个rspec并同时运行每个测试,而不是rspec顺序运行每个测试,这有意义吗?或者这只是一个完全荒谬的想法?我猜RSpec是重量级进程,在这种情况下,10000个RSpec将使

当我在二郎奇妙的世界中旅行时,我注意到了它的美丽,但更重要的是,我注意到了它的速度。这让我想知道,既然Erlang非常擅长生成轻量级进程,那么使用它作为其他进程的包装器是否有意义呢


作为一个例子,我用它来为ruby编写测试。假设我有10000个测试,所有测试都可以独立运行,没有问题。使用Erlang spawn 10000个rspec并同时运行每个测试,而不是rspec顺序运行每个测试,这有意义吗?或者这只是一个完全荒谬的想法?

我猜RSpec是重量级进程,在这种情况下,10000个RSpec将使任何操作系统屈服,即使它们被包装在Erlang进程中。Erlang的进程在操作系统意义上不是真正的进程,它们无法将其神奇的特性融入到普通的操作系统进程中。他们只是要求操作系统生成进程。

我猜RSpec是重量级进程,在这种情况下,10000个RSpec将使任何操作系统屈服,即使它们被包装在Erlang进程中。Erlang的进程在操作系统意义上不是真正的进程,它们无法将其神奇的特性融入到普通的操作系统进程中。他们只是要求操作系统生成进程。

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

但是,当一个erlang程序生成一个端口时(在您的例子中,通常是运行ruby解释器之类的外部程序),它会在VM外部创建一个新的OS进程。该外部进程使用标准输入输出与VM通信。如果您看到系统中的进程,您会注意到有一个beam进程erlangvm和一个ruby进程


因此,从erlang VM启动操作系统进程与手动、以shell脚本等方式启动操作系统进程相比没有任何区别。您将erlang进程与操作系统进程混为一谈。erlang VM在操作系统进程中运行,解释并运行在beam文件中编译的erlang程序。当erlang程序调用spawn或spawn_link时,VM将创建一个内部进程,该进程将由内部VM调度程序运行。操作系统对这些过程一无所知

但是,当一个erlang程序生成一个端口时(在您的例子中,通常是运行ruby解释器之类的外部程序),它会在VM外部创建一个新的OS进程。该外部进程使用标准输入输出与VM通信。如果您看到系统中的进程,您会注意到有一个beam进程erlangvm和一个ruby进程


因此,从erlang VM启动操作系统进程与以shell脚本等方式手动启动操作系统进程相比不会有任何区别。

如果@elmt使用erlang代码编写了10000个测试,并且可以在不涉及任何其他操作系统进程的情况下将其作为erlang进程运行,那么会有什么区别。正确。但是在这种情况下,既然@elmt想要测试ruby,那就不可能了。这是有道理的。我为我的无知感到抱歉,我现在在erlang中只是湿了脚。如果@elmt用erlang代码编写了那10000个测试,并且可以在不涉及任何其他操作系统进程的情况下作为erlang进程运行,那么会有什么不同。真的。但是在这种情况下,既然@elmt想要测试ruby,那就不可能了。这是有道理的。我为我的无知道歉,我现在正在二郎郡受罪。