Concurrency 了解Erlang的可伸缩性

Concurrency 了解Erlang的可伸缩性,concurrency,erlang,Concurrency,Erlang,据说可以生成数千个进程来同时执行类似的任务,而Erlang擅长处理这一任务。如果有更多的工作要做,我们可以简单而安全地添加更多的工作进程,从而使其具有可扩展性 我不明白的是,如果每个工作执行的工作本身都是资源密集型的,Erlang将如何处理它?例如,如果多个源向表中创建条目,而一个拥有数百个进程的Erlang应用程序从表中读取行并执行某些操作,这显然可能会造成资源负担。每个工人都会试图从表中提取一条记录。 如果这是一个坏例子,那么考虑一个必须在内存中执行CPU密集型计算的工作者。数千名这样的工人

据说可以生成数千个进程来同时执行类似的任务,而Erlang擅长处理这一任务。如果有更多的工作要做,我们可以简单而安全地添加更多的工作进程,从而使其具有可扩展性

我不明白的是,如果每个工作执行的工作本身都是资源密集型的,Erlang将如何处理它?例如,如果多个源向表中创建条目,而一个拥有数百个进程的Erlang应用程序从表中读取行并执行某些操作,这显然可能会造成资源负担。每个工人都会试图从表中提取一条记录。 如果这是一个坏例子,那么考虑一个必须在内存中执行CPU密集型计算的工作者。数千名这样的工人同时运行会使CPU工作过度

请纠正我对Erlang中可伸缩性的理解: Erlang进程只有在有可用的工作时才能获得CPU的时间片。另一方面,无论操作系统进程是否空闲,它们都会获得时间片。 Erlang进程的启动和关闭时间远低于OS进程

除了以上两点之外,Erlang还有什么可以扩展的地方吗

谢谢,
Melvyn在Erlang中的缩放不是自动的。Erlang语言和运行时提供了一些工具,使编写并发程序相对容易。如果写得正确,则可以沿几个不同的维度进行缩放:

  • 在多个内核上并行执行-因为VM知道如何利用它们
  • 容量-因为每个任务可以有一个进程,而且它们很轻
最大的优点是Erlang进程是隔离的,就像在操作系统中一样,但与操作系统不同,通信开销很小。这两个特性是您希望在Erlang编程中利用的

如果您的目标是高并行执行,那么就要避免数据资源高度竞争的问题。解决这个问题的最好办法是把你的问题分开,这样它就不会发生了

我有一篇博文,更详细地描述了Erlang调度器的工作原理。你可能想读一下