由 Erlang 编程(2009)开始:
Erlang 并发性快速且可伸缩。它的进程是轻量级的,因为 Erlang 虚拟机不会为每个创建的进程创建一个 OS 线程。它们是在 VM 中创建、调度和处理的,与底层操作系统无关。因此,进程创建时间的次序为微秒,与并发现有进程的数量无关。将其与 Java 和 C # 进行比较,其中每个进程都创建一个底层操作系统线程: 您将得到一些非常有竞争力的比较,Erlang 的性能远远超过这两种语言。
由 Erlang 面向并发编程(pdf) (幻灯片)(2003) :
我们观察到,创建一个 Erlang 进程所需的时间是常数1μs,最多可达2,500个进程; 此后,最多可达30,000个进程的时间增加到约3μs。Java 和 C # 的性能如图的顶部所示。对于少数进程,大约需要300μs 来创建一个进程。创建超过2000个进程是不可能的。
我们看到,对于多达30,000个进程,在两个 Erlang 进程之间发送消息的时间约为0.8 μs。对于 C # ,每条消息大约需要50μs,最多可以达到最大进程数(大约1800个进程)。Java 更糟糕,对于多达100个进程,每条消息需要50μs,此后,当有大约1000个 Java 进程时,每条消息需要10ms。
从技术上讲,我不能完全理解为什么 Erlang 进程在产生新进程时效率更高,而且每个进程占用的内存更少。操作系统和 Erlang VM 都必须执行调度、上下文切换和跟踪寄存器中的值等操作。
为什么操作系统线程的实现方式与 Erlang 的进程不同呢?他们必须支持更多的东西吗?为什么他们需要更大的内存占用?为什么它们的产卵和交流速度较慢?
从技术上讲,为什么 Erlang 的进程在产生和通信方面比操作系统线程更有效率?为什么操作系统中的线程不能以同样有效的方式实现和管理呢?为什么操作系统线程有更大的内存占用,加上更慢的生成和通信?