Erlang的SMP支持

Erlang从R11开始开始支持SMP(Symmetrical Multi Processor),之后不断优化完善对SMP的支持。Erlang对SMP的开发策略是
First,”make it work”
Second,”mesaure” and find bottlenecks
Third “optimize” by removing bottlenecks

在没有SMP时,ErlangVM只在一个主线程单个调度器,所以IO和共享数据访问都不需要加锁保护。
1_Non_Smp


初始阶段,SMP只实现了多调度器,单运行队列,通过锁保护共享数据和队列。这时,性能瓶颈主要在队列维护中,在单调度器下,开启SMP比Non SMP慢10%左右。

2_SMP_First

从R12版本开始,Erlang VM默认开启SMP, [smp:8]表示VM中用8个调度器。可通过“-smp [enable|disable|auto]” 命令设置SMP是否开启。

3_SMP_8

多调度器,多运行队列阶段。每个调度器各有一个运行队列,根据调度器的负载,协调队列中的任务分配。减少队列中的锁冲突,提高CPU利用率。

4_query_per_scheduler

SMP的效率很大性度上取决于应用的逻辑,对于可并行运算,前后关联性不大的业务,SMP有很大优势。

详情可参考EUC_SMP http://www.erlang.se/euc/08/euc_smp.pdf

Erlang技术分享内容均为原创,转载请标明本文地址
本文链接:http://www.kongqingquan.com/archives/71

此条目发表在Erlang分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">