摘要:
OTP 技术委员会 - 影响R16的决策【翻译】水平有限,错误之处请指正!英文原文:OTP Technical Board - Decisions affecting R16Written by Patrik, 16 Oct 2012OTP技术委员会就产品和语言的未来发展做出决策。其中既考虑到爱立信内部使用者的需求,也考虑了开源方面的需求。OTP技术委员会于2012年10月11日召开会议,讨论了哪些特性将会在即将发布的R16中被增加或删减。其中一些决定可能会影响开源社区,发布如下。问题 1 - Unicode源代码- 委员会决定寻找一个解决方案(像在Python里一样)将输入文件的编码格式告诉 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/processes.html错误之处欢迎指正。8 进程8.1 创建Erlang进程相比操作系统的线程和进程来说,Erlang的进程更为轻量。一个新创建的进程在non-SMP、不支持HiPE的虚拟机上占用内存309words。(支持SMP和HiPE的话,内存占用会翻倍。)这个数字可以这样来得到:Erlang (BEAM) emulator version 5.6 [async-threads:0] [kernel-poll:false]Eshell V5.6 (abort with ^G)1> 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/tablesDatabases.html错误之处欢迎指正7 表和数据库7.1 ets,dets和mnesia每一个Ets的例子都适用于Mnesia。通常所有Ets的例子都适用于Dets表。Select/Match 操作Ets和Mnesia的Select/Match操作代价很高。通常需要检索整张表。你应该尽可能优化你的数据结构,以便最少的使用select/match。但是,如果你确实需要select/match的话,它还是比tab2list高效很多的。接下来的章节会有这方面的例子,包括如何避免使用se 阅读全文
摘要:
6 函数6.1 模式匹配函数头以及case和receive子句中的模式匹配都被编译器优化过。除了个别例外,大部分情况下调整顺序不会带来任何好处。二进制就是一个例外。匹配二进制时,编译器不会重新排列分支。把一个空的二进制放在后边通常会比放在前面稍快。下面的例子展示了另一种例外情况:DO NOTatom_map1(one) -> 1;atom_map1(two) -> 2;atom_map1(three) -> 3;atom_map1(Int) when is_integer(Int) -> Int;atom_map1(four) -> 4;atom_map1(fiv 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/listHandling.html水平有限,错误之处欢迎指正。5 列表解析5.1 创建一个列表创建列表最好从最后开始,一个元素接一个元素地附加在前面。如果你用++操作符:List1 ++ List2会通过... 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/binaryhandling.html(水平有限,错误之处欢迎指正)4.3 匹配二进制我们再来回顾一下之前的例子,看看到底发生了什么。DO (in R12B)my_binary_to_list(<<H,T/binary>>) ->[H|my_binary_to_list(T)];my_binary_to_list(<<>>) -> [].my_binary_to_list/1第一次被调用时,会创建一个match context。match 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/binaryhandling.html(水平有限,错误之处欢迎指正)4 二进制的构造和匹配在R12B中,构造和匹配二进制比之前的版本要快很多。你可以轻松的写出一个二进制结构。DO (in R12B) / REALLY DO NOT (in earlier releases)my_list_to_binary(List) -> my_list_to_binary(List, <<>>).my_list_to_binary([H|T], Acc) -> my_list 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/commoncaveats.html(水平有限,错误之处欢迎指正)3 一般说明这里列出一些需要注意的模块和内建函数,这里不只关注性能,还有其他。3.1 timer模块用erlang:send_after/3和erlang:start_time/3创建的定时器,远比timer模块创建的定时器高效得多。timer模块用单独的进程管理定时器,如果大量进程经常性的创建和注销定时器,这个进程很容易过载(尤其在使用SMP虚拟机的时候)。有些timer模块的函数不涉及定时器(例如timer:tc/3,timer: 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/myths.html(翻译水平有限,错误之处欢迎指正)2 Erlang性能的八个谬论有些真理依然被人们相信,尽管早已被推翻成为谬论,或许是因为“信息”通过口口相传总是比通过发布公告传得快,例如,匿名函数已经变快。这里,我们秒杀那些已成为谬论的,曾经的真理。2.1谬论:匿名函数很慢是的,匿名函数(funs)过去很慢,非常慢,比apply/3还要慢。起初,匿名函数仅仅是用语法糖来实现的,编译诡计,普通元组,apply/3,以及其他一堆技巧。但那已经是古老的历史了。匿名函数在R6B版本有了自己的数据类型, 阅读全文
摘要:
原文链接:http://www.erlang.org/doc/efficiency_guide/introduction.html1 引言1.1 目的过早的优化是一切罪恶的根源 -- D.E.Knuth高效代码是建立在合理的架构和算法之上的结构良好而整洁的代码。高效代码是在现有的代码实现中,忽略良好注释的接口,而只关注晦涩难懂带来的“好处”。理想情况下,你的代码应该只包含第一种高效代码。假如运行太慢,进行性能分析,找出性能瓶颈,并且只优化瓶颈。保持其他代码尽可能的干净整洁。很幸运,编译和运行时的优化在R12B被引入,这使得写出整洁而高效的代码变得容易。例如,为了获得最快速度的二进制模式匹配而存 阅读全文