幕后的Erlang进程是什么?

时间:2010-05-07 11:07:33

标签: concurrency multithreading erlang fiber

我对Erlang的了解非常有限,但就我所知,它可以以非常低的成本产生“过程”。

所以我想知道,幕后的那些“过程”是什么?

它们是纤维吗?主题?延续?

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

另外,来自Erlang doc:

  

Erlang流程重量轻   (动态增长和收缩)   占用内存小,创建速度快   并终止和安排   开销很低。

来源:http://www.erlang.org/doc/reference_manual/processes.html

您可能还想看看这个:

http://www.defmacro.org/ramblings/concurrency.html

在谈论Erlang流程时,它说:

  

Erlang进程很轻量级   线程。它们起步非常便宜   起来并且毁灭并且非常快   因为在引擎盖下切换   它们只是功能。一个典型的   Erlang系统在现代上运行   台式电脑之间可以切换   成千上万的这样的过程。   每两个过程都会切换进程   十几个函数调用   切换粒度较小但节省了   通常需要大量的时间   浪费在上下文切换上。

答案 2 :(得分:1)

我还没有找到明确的来源,但据我所知:

  • 有一个调度程序(例如,多个调度程序 合作地)确定在哪个OS上启动哪个erlang进程 线程。

  • 这些进程有一个可增长的堆栈(也许是一个前言 每个函数在需要时分配堆栈,因此它们不消耗 除非他们需要,否则会有太多记忆。

  • 它们会根据它们是否回退到调度程序 等待数据或执行了足够的时间 (也许某些功能中的前导码会检查多长时间 已经过去了。与线程不同,它们不会被抢占?

  • 每个进程分配来自不同页面或来自a的内存 不同的分配器,所以不可能共享内存(在 操作系统进程避免共享内存的方式类似。

  • 据推测,每个erlang进程也有单独的分配器或页面也会有所帮助 垃圾收集,并在进程结束的情况下,然后 无需进行任何垃圾回收即可返回页面: http://prog21.dadgum.com/16.html

答案 3 :(得分:-10)

基本上它们是线程;)一个地址空间。