- Modlue:module_info().可以查看模块的一些元数据,他是在编译的时候,由编译器自行创建的.大致可以用于在发生undef错误的时候查看是否没有模块,或者方法没有导出,也可以查看编译时间/路径/版本等,以便确认代码是否热更成功.m(Module).也具有同样的效果.
- code:clash()方法在code path中查找重名的模块
- 在shell里面执行help() 很多实用的辅助方法
- receive的0超时语句可以帮我们快速清空邮件队列
- 从Pid反查node信息 node(Pid)即可
- if语句会对Guard子句做catch,所以 if 1/0 ->a; true ->b end.的返回值是b而不是抛出异常,但是if的Guard子句放在变量里就可以让异常抛出来 G=1/0 , if G->a; true ->b end.
- ETS Table由进程创建,进程销毁ETS Table也随着销毁,在使用Shell做ETS实验的时候要注意一下,Table的拥有关系可以give_away 转交给其它进程.一个Erlang节点的ETS表的数量是有限制的,默认是1400个表,在启动erlang节点之前+e Num,可以修改这个限制
- erlang是基于消息传递机制的语言.就是说A线程要和B线程共享数据,那么A线程会把自己的数据复制一份,以消息的形式发送给B线程.越大的数据,自然开销就大.所以erlang适合大运算小数据.
- 使用以下方式可以获得erlang的核心代码
- spawn可以调用本模块的方法,而不用导出:spawn(fun() ->test_pid(self()) end)
- 判断匿名函数的参数个数:
- 匿名方法字符串执行
- rr(Module).%%把Module中的Record加载到Shell中,【超有用】
- rr("/"). %%把在这个子目录下的所有Module里面的Record给加载到Shell里面
- killall beam.smp 把本节点上所有的Erlang节点都杀死
- lists:key_find的查找方式,比模式匹配快3倍.测试环境:长度1w的kv列表,查找10w次,keyfind的消耗2秒左右,匹配需要消耗6秒.
- lists:nth的效率远远低于element的效率.
- 条件编译
- if的效率比case快一半,这个是基于不赋值变量的情况下.如果需要赋值一个变量在使用if比较,那么二者的效率基本相同.
- erts_debug可用于erlang系统的探测调试,
前提是先用erts_debug:set_internal_state(available_internal_state, true),
否者调用get_internal_state会提示失败.
得到对象平坦化后的大小:erts_debug:flat_size(L1).
获得一个对象占用的字数:erts_debug:size() - 为了实现多进程并发,erlang虚拟机实现了进程挂起和调度机制。进程执行代码时会消耗调度次数(Reductions),当调度次数为0时就会挂起这个进程,然后从调度队列中取出第一个进程执行。如果进程在等待新消息时也会被挂起,直到这个进程接收到新消息后,就重新加到调度队列。这个就是timer:sleep的实现原理.
erlang经验笔记
最新推荐文章于 2020-05-08 17:19:01 发布