Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Process 为什么Erlang进程创建和消息传递时间少于java和C#_Process_Erlang - Fatal编程技术网

Process 为什么Erlang进程创建和消息传递时间少于java和C#

Process 为什么Erlang进程创建和消息传递时间少于java和C#,process,erlang,Process,Erlang,我在互联网上搜索Erlang进程模型,在Joe Armstrong的一篇演讲中找到了一些图表。它们显示了Erlang、java和C之间的进程创建和消息传递时间之间的巨大差异。有谁能告诉我差别如此之大的原因吗?Erlang进程重量非常轻。实现甚至不需要将OS线程分配给Erlang进程。这与Erlang的功能性质有关 在Erlang中,进程不是真正的进程。它们是语言处理的轻结构。消息传递也由语言处理,尽可能使用共享内存 另一方面,其他语言正在使用真正的线程/进程,因为它们没有像这样的内置轻型结构。因

我在互联网上搜索Erlang进程模型,在Joe Armstrong的一篇演讲中找到了一些图表。它们显示了Erlang、java和C之间的进程创建和消息传递时间之间的巨大差异。有谁能告诉我差别如此之大的原因吗?

Erlang进程重量非常轻。实现甚至不需要将OS线程分配给Erlang进程。这与Erlang的功能性质有关

在Erlang中,进程不是真正的进程。它们是语言处理的轻结构。消息传递也由语言处理,尽可能使用共享内存

另一方面,其他语言正在使用真正的线程/进程,因为它们没有像这样的内置轻型结构。因此,这些结构有点重,使用线程原语进行通信(较慢)


我不知道你的图表,但我想它表明Erlang的进程更好。它比较了本质上不同的东西,但是它表明Erlang可以模拟使用消息通信的独立对象(在其他语言中无法真正做到的事情)。

图表和幻灯片提供的信息很少,无法了解此处实际测量的内容。甚至不清楚什么是“过程”。例如,看起来Erlang进程不像Java或C#one那样是OS级进程。这似乎是在比较苹果和橙子…@0xA3:Erlang进程的行为与开发人员眼中的进程类似。它们是独立的执行单位。它们的行为类似于进程,而不是线程。其他人的缺点是,他们使用操作系统级的进程或线程,并且没有为解决实际问题提供同样有用的工具。如果您想在这些语言中执行与Erlang中相同的操作,您必须尽可能使用这些语言,这样比较才是正确的。可能的重复我不会说它使用共享内存,因为数据(几乎)总是在进程堆之间复制。尽管一切都发生在一个操作系统进程内。我认为Scharron的意思是,虽然从概念上讲,没有任何东西是共享的,但作为一种优化,VM可以通过传递指针而不是复制数据来共享数据。这与Erlang作为一种函数式语言完全没有关系。任何具有廉价进程和消息传递的语言都可以。(并不是说有任何其他语言具有类似Erlang的进程…)实际上,它与Erlang是一种函数式语言密切相关,因为单赋值变量的函数性质消除了进程隔离的大部分负担,因为不需要担心共享更新或访问争用。添加消息复制而不是引用,您就有了一个真正轻量级流程的诀窍。@Alan:是的,这就是我的想法,谢谢您帮我写下来。:)