概述
Erlang中的一些测试结果
1.匿名函数重新生成
测试环境
Erlang/OTP 17 [erts-6.0] [64-bit] [smp:6:6] [async-threads:10]
1 | [lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]) || X <- lists:seq(1,5)]. |
看到大佬们17年的博客说到用方式1每次循环匿名函数都会重新生成
测试下看看
1 | -module(test_anonymous_func). |
图示
分析
从打印的make_ref看匿名函数没有重新生成,官网已经下载不到更低的版本了,遂放弃,不知道是在OTP 17以后编译器做了优化还是要到底层的汇编码去找区别,因个人能力有限,只能测到这步,如有了解汇编的大佬还请指点一二
2.lists:append执行时间分析
图示
分析
从图可以看出来速度差了有10倍,length这个nif函数Erlang其实已经优化得很好了,为什么lists:append不先通过成length排序再把长度短的放前面查入呢?
3.ets取数据
1)测试下match
1 | ets:new(table, [named_table, bag]). |
2)测试下 insert_new 在 set 下的情况
1 | ets:new(ingredients,[set, named_table]). |
3)测试下select的用法
1 | ets:fun2ms(fun(X) -> X end). |
4)测试下const的用法
const会在导入环境中的变量时生成
官网关于const的一些资料
1 | Tab = ets:new(tab, []). |