Home
archives
Categories
C
(1)
erlang
(17)
go
(20)
java
(2)
other
(12)
About
RSS
sy-vendor-blog
Always
Fighting.
Welcome!
More
Toggle navigation
2019-06-19
笔记一
在erlang代码中,尽可能使用尾递归函数
使用’++’时,左边list会被拷贝,然后添加到有右边list的头部,因此最好把length较短的list放在左侧
避免使用regexp,如果需要正则表达式,请使用re
timer模块的大部分函数实现,依赖于一个process,如果过多使用timer,会导致这个process负载过大,影响效率。推荐使用erlang:send_after/3及erlang:start_timer/3
避免使用list_to_atom/1,因为erlang中atom数量最大为1048576, 且不进行GC控制。因此如果持续性的调用list_to_atom/1 可能会达到系统上限,从而导致emulator terminate。建议使用list_to_existing_atom/1
list内部实现为一个列表,因此length(List), 需要遍历整个list比较耗时
对于不同的数据类型,使用不同的size函数:tuple_size/1,byte_size/1,bit_size/1
使用binary match来进行binary的分割,而不使用split_binary/2
如果两个list都拥有很多数据,那么请不要使用’–’,而是将数据转化到ordsets,然后调用ordsets:substract/2
通过code:clash/0 检测代码中是否有module冲突现象
在消息循环中,对于unknown的消息,可以调用lib:flush_receive/0 将其清除,减轻process msg queue的长度
尽可能使用record, 而不是原始的tuple
尽可能少的使用catch和try,在erlang程序中,不推荐主动捕获异常。只有当我们的逻辑特别复杂,我们可以使用throw来返回数据,使用catch来获取返回值
{error, enfile} enfile error in socket 是因为linux系统中 ulimit 限制, 在root下修改:ulimit -n 25000 即可
erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针)。因此string速度较慢,空间占用较大
调用lists:flatten/1可以将list扁平化,这个操作代价很大,比’++’还要昂贵
epmd -d -d 启动 epmd 可以查看erlang node之间的通讯
{error, enotconn} 表示socket已经关闭
不要在handle_call/3 内部调用另一个 gen_server:call 相关的函数,避免出现死锁
← Mysql记录
slice行为 →