10

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

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

它们是纤维吗?线程?续集?

4

4 回答 4

4

它们是轻量级进程

另请参阅我的问题技术上为什么 Erlang 中的进程比 OS 线程更有效

于 2010-05-07T11:10:35.157 回答
3

此外,来自 Erlang 文档:

Erlang 进程是轻量级的(动态增长和收缩),内存占用小,创建和终止速度快,调度开销低。

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

您可能还想看看这个:

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

在谈到 Erlang 进程时,它说:

Erlang 进程是轻量级线程。它们的启动和销毁非常便宜,并且切换速度非常快,因为在引擎盖下它们只是功能。在现代台式计算机上运行的典型 Erlang 系统可以在数以万计的此类进程之间切换。进程每隔几十个函数调用就会切换一次,这使得切换的粒度降低,但节省了通常浪费在上下文切换上的大量时间。

于 2010-05-07T11:15:38.087 回答
1

我还没有找到明确的来源,但据我了解:

  • 有一个调度程序(例如,或多个协同工作的调度程序)确定在哪个 OS 线程上启动哪个 erlang 进程。

  • 这些进程有一个可增长的堆栈(如果需要,可能在每个分配堆栈的函数中都有一个序言),因此除非需要,否则它们不会消耗太多内存。

  • 它们返回给调度程序,具体取决于它们是在等待数据还是已经执行了足够长的时间(可能某些函数中的前导代码会检查已经过去了多少时间)。与线程不同,它们不会被抢占?

  • 每个进程从不同的页面或不同的分配器分配内存,因此不可能共享内存(类似于操作系统进程避免共享内存的方式)。

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

于 2012-07-13T04:38:32.190 回答
-10

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

于 2010-05-07T11:13:48.377 回答