Concurrency 了解Erlang的可伸缩性
据说可以生成数千个进程来同时执行类似的任务,而Erlang擅长处理这一任务。如果有更多的工作要做,我们可以简单而安全地添加更多的工作进程,从而使其具有可扩展性 我不明白的是,如果每个工作执行的工作本身都是资源密集型的,Erlang将如何处理它?例如,如果多个源向表中创建条目,而一个拥有数百个进程的Erlang应用程序从表中读取行并执行某些操作,这显然可能会造成资源负担。每个工人都会试图从表中提取一条记录。 如果这是一个坏例子,那么考虑一个必须在内存中执行CPU密集型计算的工作者。数千名这样的工人同时运行会使CPU工作过度 请纠正我对Erlang中可伸缩性的理解: Erlang进程只有在有可用的工作时才能获得CPU的时间片。另一方面,无论操作系统进程是否空闲,它们都会获得时间片。 Erlang进程的启动和关闭时间远低于OS进程 除了以上两点之外,Erlang还有什么可以扩展的地方吗 谢谢,Concurrency 了解Erlang的可伸缩性,concurrency,erlang,Concurrency,Erlang,据说可以生成数千个进程来同时执行类似的任务,而Erlang擅长处理这一任务。如果有更多的工作要做,我们可以简单而安全地添加更多的工作进程,从而使其具有可扩展性 我不明白的是,如果每个工作执行的工作本身都是资源密集型的,Erlang将如何处理它?例如,如果多个源向表中创建条目,而一个拥有数百个进程的Erlang应用程序从表中读取行并执行某些操作,这显然可能会造成资源负担。每个工人都会试图从表中提取一条记录。 如果这是一个坏例子,那么考虑一个必须在内存中执行CPU密集型计算的工作者。数千名这样的工人
Melvyn在Erlang中的缩放不是自动的。Erlang语言和运行时提供了一些工具,使编写并发程序相对容易。如果写得正确,则可以沿几个不同的维度进行缩放:
- 在多个内核上并行执行-因为VM知道如何利用它们
- 容量-因为每个任务可以有一个进程,而且它们很轻