Concurrency 幕后的Erlang进程是什么?
我对Erlang的了解非常有限,但据我所知,它可以以非常低的成本生成“进程” 所以我想知道,幕后的“过程”是什么 它们是纤维吗?线程?延续?它们是Concurrency 幕后的Erlang进程是什么?,concurrency,multithreading,erlang,fiber,Concurrency,Multithreading,Erlang,Fiber,我对Erlang的了解非常有限,但据我所知,它可以以非常低的成本生成“进程” 所以我想知道,幕后的“过程”是什么 它们是纤维吗?线程?延续?它们是 另请参见我的问题。基本上它们是线程;)为它们提供一个地址空间。另外,从Erlang文档: Erlang进程是轻量级的 (动态增长和收缩)使用 内存占用小,创建速度快 以及终止和调度 开销很低 资料来源: 您可能还想看看这个: 在谈到Erlang进程时,它说: Erlang进程是轻量级的 线程。一开始很便宜 摧毁和摧毁,并且很快就会被摧毁 在引擎盖下
另请参见我的问题。基本上它们是线程;)为它们提供一个地址空间。另外,从Erlang文档: Erlang进程是轻量级的 (动态增长和收缩)使用 内存占用小,创建速度快 以及终止和调度 开销很低 资料来源: 您可能还想看看这个: 在谈到Erlang进程时,它说: Erlang进程是轻量级的 线程。一开始很便宜 摧毁和摧毁,并且很快就会被摧毁 在引擎盖下切换 它们只是函数。典型的 在现代计算机上运行的Erlang系统 台式计算机可以在 数万个这样的过程。 每两周切换一次进程 十几个函数调用 切换粒度较小,但节省了 正常情况下的大量时间 浪费在上下文切换上
我还没有找到确切的来源,但据我所知:
- 有一个调度程序(例如,一个或多个调度程序) 协作)确定在哪个操作系统上启动哪个erlang进程 线
- 这些进程有一个可扩展的堆栈(可能是 每个函数分配堆栈(如果需要),这样它们就不会消耗 内存太多,除非他们需要
- 它们将根据它们是否是调度程序而返回给调度程序 等待数据或已执行足够长的时间 (可能有些函数中的前导代码会检查需要多长时间 已经过去)。与线程不同,它们不会被抢占
- 每个进程从不同的页或从一个 不同的分配器,因此无法共享内存(在 操作系统进程避免共享内存的类似方式)
- 假定每个erlang进程都有单独的分配器或页面也会有助于 垃圾收集,如果进程结束,则 无需进行任何垃圾收集即可返回页面: