关于官方的 Lua5.3 实现: 写屏障

如这篇LUA GC文章所述,在"Tri-Color Incremental Mark & Sweep"部分,看到如下内容:

这是Lua 5.1/5.2以及LuaJIT 1.x/2.0使用的GC算法。它是Lua 5.0中链接列表算法的增强版。表使用后向障碍,所有其他能够遍历的对象都使用前向障碍。

我看了lua_rawset的源代码,它使用了luaC_barrierback(L, hvalue(o), L->top-1); 这是一个共识,对于表的写操作,后向障碍会减慢GC的进度(重新访问和重新遍历表对象)。

我的问题是:为什么作者在Lua表的写操作中选择了后向障碍而不是前向障碍(加速GC性能)?有什么优势吗?

点赞