我对 Erlang 的了解非常有限,但据我所知,它可以以非常低的成本产生“进程”。
所以我想知道,幕后的那些“过程”是什么?
它们是纤维吗?线程?续集?
我对 Erlang 的了解非常有限,但据我所知,它可以以非常低的成本产生“进程”。
所以我想知道,幕后的那些“过程”是什么?
它们是纤维吗?线程?续集?
它们是轻量级进程。
另请参阅我的问题技术上为什么 Erlang 中的进程比 OS 线程更有效。
此外,来自 Erlang 文档:
Erlang 进程是轻量级的(动态增长和收缩),内存占用小,创建和终止速度快,调度开销低。
来源:http ://www.erlang.org/doc/reference_manual/processes.html
您可能还想看看这个:
http://www.defmacro.org/ramblings/concurrency.html
在谈到 Erlang 进程时,它说:
Erlang 进程是轻量级线程。它们的启动和销毁非常便宜,并且切换速度非常快,因为在引擎盖下它们只是功能。在现代台式计算机上运行的典型 Erlang 系统可以在数以万计的此类进程之间切换。进程每隔几十个函数调用就会切换一次,这使得切换的粒度降低,但节省了通常浪费在上下文切换上的大量时间。
我还没有找到明确的来源,但据我了解:
有一个调度程序(例如,或多个协同工作的调度程序)确定在哪个 OS 线程上启动哪个 erlang 进程。
这些进程有一个可增长的堆栈(如果需要,可能在每个分配堆栈的函数中都有一个序言),因此除非需要,否则它们不会消耗太多内存。
它们返回给调度程序,具体取决于它们是在等待数据还是已经执行了足够长的时间(可能某些函数中的前导代码会检查已经过去了多少时间)。与线程不同,它们不会被抢占?
每个进程从不同的页面或不同的分配器分配内存,因此不可能共享内存(类似于操作系统进程避免共享内存的方式)。
据推测,每个erlang进程也有单独的分配器或页面也有助于垃圾收集,并且在进程结束的情况下,可以返回页面而无需进行任何垃圾收集: http: //prog21.dadgum.com/ 16.html
基本上它们是线程;)它们的一个地址空间。