Erlang数据类型实现

国庆,没事,也不去给交通添堵,在家就看了下erlang怎么用c实现我们常用的list和tuple等基础数据类型,看了一遍源码,感觉还是能看得懂大概,毕竟没有特别高深的算法,不过有些比较绕的,就要费点心思,比如binary部分,单数据结构就有三种。反正不做OTP底层开发,看得大概也就满足了,写业务做框架做优化都会有所依据。

不过,我不打算具体讲点啥,因为内容太多,今天是国庆第四天刚过,要写完,估计我剩下三天都得在电脑前也未必搞得定。主要是记录下,一些导读的文章。

1、数据类型的内存 http://www.erlang.org/doc/efficiency_guide/advanced.html

2、siyao同学一系列介绍数据类型实现的文章

Erlang数据类型的表示和实现(1)——数据类型回顾 http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_1.html

Erlang数据类型的表示和实现(2)——Eterm 和立即数 http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_2.html

Erlang数据类型的表示和实现(3)——列表 http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_3.html

Erlang数据类型的表示和实现(4)——boxed 对象 http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_4_boxed.html

Erlang数据类型的表示和实现(5)——binary http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_5_binary.html

3、Erlang/erts代码笔记 - 通用Hash表 http://blog.crackcell.com/posts/2012/08/13/erts_hash.html

4、Erlang原子(atom)的内部实现及应用 http://844604778.iteye.com/blog/1959554

5、Erlang中list和tuple的构建及转换的内部实现 http://blog.csdn.net/zhongruixian/article/details/9410193

主要还是看代码,导读仅仅就是给你开个头罢了。

题外话,去年,线上服务器出了atom爆掉的问题(但是后来说又不是,是其他问题),但是我们主程(算吧)看了litaocheng的开发杂记http://erlangdisplay.iteye.com/blog/374167 ,其中有一段,“* 避免使用list_to_atom/1,因为erlang中atom数量最大为1048576, 且不进行GC控制。因此如果持续性的调用list_to_atom/1 可能很容易达到系统上限,从而导致emulator terminate。请使用list_to_existing_atom/1。 ”,然后将list_to_atom改为catch list_to_existing_atom,崩了,再list_to_atom。现在看来,atom实现是基于index和hash,如果本身出现过的,index和hash是不会变,何来达到系统上限呢?详细可以看看qingliang的[erlang]list_to_atom与list_to_existing_atom http://www.qingliangcn.com/2014/04/erlang/ 或者自己去看https://github.com/erlang/otp/blob/maint/erts/emulator/beam/bif.c 实现。

最后,知其然知其所以然。

发表评论

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