如果能够并行执行很少的进程,那么能够有效地生成许多进程有什么意义呢?

时间:2017-12-19 16:19:31

标签: concurrency parallel-processing functional-programming erlang

Erlang在产生新进程方面非常有效,但重要的是,如果CPU只能执行,例如其中4个并行?

因此,其他人应该等待Erlang - "上下文切换"。

如果您拥有10k进程,那么与使用Java / C#/ C ++相比,您可以更快地完成更多工作吗?

1 个答案:

答案 0 :(得分:5)

原因有很多:

  • 从概念上讲,流程很容易推理。 JavaScript之类的语言中的异步回调和承诺更难以推理,因为回调中的代码可以更改线程中其他代码使用的变量值。
  • 进程为在其中运行的代码提供隔离。进程只能通过在其邮箱中放置邮件来影响其他进程。流程不能干涉其他流程的状态。
  • 流程是精细的。这意味着:
    • 如果您在4核计算机上有400个进程,则调度程序将确保在线程中分配它们,以便充分利用4个核心。一个核心总是会处理操作系统的东西,因此调度程序可能最终会使在该核心上运行的线程比其他3个线程更少工作。但它适应,因此在任何情况下,调度程序都会尽力确保进程尽可能少地等待,并且线程总是有一个等待CPU时间的进程队列。
    • 迁移到具有更多内核的更好硬件并不需要更改应用程序的代码或体系结构。将Erlang应用程序从4核计算机移动到64核计算机将意味着您的应用程序运行速度大约快16倍而无需任何更改,假设您的应用程序的结构可以利用额外的核心(通常这样意味着确保可以并行完成的任务在不同的流程中执行。)
  • 进程非常轻量级,因此开销很小。在大多数应用程序中,进程和调度程序提供的好处远远超过运行数千个进程的小开销。商品硬件可以轻松处理数十万个流程。

因此,在结束时,流程是否并行执行并不重要。他们提供的其他好处足以证明其使用的合理性。