lua使用的一点建议
2020-03-20 本文已影响0人
Teech
- string 拼接大量字符串 少用默认连接符号
当需要拼接大量字符串的时候,少用默认的字符串连接,如果大量字符串连接时,尽量用table,然后table.concat来连接字符串。这个做法用table作为一个缓冲区,一次性连接。而不是中间产生大量中间临时的字符串。因为每次新建一个字符串都会有哈希值计算,哈希查找,最后还需要gc这些消耗。 - table 尽量预先填充
因为如果不预先填充,每次都是插入,会经常会有rehash的情况发生,因为lua本身为了内存利用率保证可以到50%以上,插入会经常rehash发生,尤其表比较小的时候。 - weak table 在同一个vm中不要大量使用弱表
在propagate的最后一个阶段,会原子性的标记弱表链表的,这个过程会stop the world,这里潜在会引起卡顿,参考atomic函数,
/* remark weak tables */
g->gray = g->weak;
g->weak = NULL;
lua_assert(!iswhite(obj2gco(g->mainthread)));
markobject(g, L); /* mark running thread */
markmt(g); /* mark basic metatables (again) */
propagateall(g);