Erlang多核编译优化

在文章http://erlangdisplay.iteye.com/blog/1264038中介绍了Erlang并行编译。原理是开启多个进程,每次把文件分配到各进程中编译,等所有进程编译完成后,再进行下一轮编译。
按上面的方式,虽然提升了编译速度,但还存在一个问题。因为每组中的文件大小不一,各自所需的编译时间不同,所以会出现进程空闲等待的问题。


如:8个进程的优化编译中,如果分组中有一个文件需的编译时间比其他文件长非常多,因为要等分组中的文件都编译完成后才能进入下一轮编译,所以其他7个进程都要空等待。开启8个进程编译,平均CPU利用率一般只有 200%~300%。

项目https://github.com/kqqsysu/mmake修改了上面的问题,优化后,不对文件进行分组,一个进程编译完成后,从剩余文件中获取文件继续编译,进程不用空等待,充分利用CPU资源。优化后,比之前的编译速度提升2倍以上。

项目地址:https://github.com/kqqsysu/mmake

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

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

Erlang多核编译优化》有 2 条评论

  1. haoxian说:

    实用粗略比较后,原来花4分半钟的,你的快了十几秒吧,但会漏了几个没编译的。。。还没查原因

    • kongqq说:

      要在多核的机器并且各文件编译时间差别较大时才会有优势,单核或双核都不明显。漏文件没编译要看源文件和beam的修改时间。

发表评论

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

您可以使用这些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="">