Erlang代码的性能注意事项

Erlang OTP提供了一个编写高效可靠的并发系统的基础,这个框架本身的在底层和编译的性能上已经提供了足够的可用性。通常我们在实际应用中不会遇到太大的问题,但有时候会因为使用的不当而造成一些问题。这里记录的就是在Erlang语言本身层面需要注意的使用问题。

Big Numbers

当Erlang的数字类型超出标准C中所提供的数据类型所能存储的范围,尽管在使用上并不需要做额外的转换,但存储上会和普通的数字类型会有一些不同,这点还是需要了解。

Atoms

这是最容易被误用的类型。需要特别注意Atom是不会被GC回收的,所以必须控制Atom的总量,特别在处理网络消息时,最常见的错误是频繁使用binary_to_atom生成了各种不同的Atom,使程序看起来出现近似内存泄露的问题。

Tuple vs List

Tuple是很高效的一种数据结构类型,List在使用上则需要特别注意。在构建较大的List时,尽量避免使用在尾部Append的方式,而应该是在List首部增加元素,需要的话在完成时执行reverse操作。因为当在尾部append元素时,将会遍历List中的每一个元素。

另外,对于List来说,尽量避免使用 — 这个操作符,同时使用list_to_atom时需要特别留心,具体的原因可以参考对Atom的说明。

Process

对于使用OTP模板里的behavior来创建process时,注意不要在init的方法里执行太复杂和消耗时间太长的逻辑。因为这会影响对创建process的parent进行回调的时间,对系统的并发能力有一定影响。