我对Erlang的了解非常有限,但就我所知,它可以以非常低的成本产生“过程”。
所以我想知道,幕后的那些“过程”是什么?
它们是纤维吗?主题?延续?
答案 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)
基本上它们是线程;)一个地址空间。