erlang经验笔记

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值