2015-09-01

之前纯Lua写的试下来,还是不满意效率,最终还是拿起了c语言,先重写了核心数据部分。

Lua主要慢在hash表上,因为它所有结构都是hash表,除非你用数组。

这导致如果考虑效率就不能保存复杂的结构,而我为了效率,很多地方强行用了数组,代码就丑陋了。

实在忍不下去了打算用c语言,但是就算c语言内部很快,一旦要从lua调用,调用上依然会消耗很多cpu时间,导致效率还是很低。

好在luajit有FFI这个东西,用c写了测试代码然后用FFI结合,试了试看效率果然提升很多,抛弃纯Lua的理念,用c重写核心。

FFI调用C的数据测试下来几乎没有损失,而且我可以通过ffi直接返回c指针给lua,然后lua可以直接调用和操作指针,效率一下子就上来了。 这种效率让我能在Lua里用共享内存的指针了,多个lua间共享这一份数据,这样多进程计算时也能不增加内存消耗,实在是美妙。

现在初步效果是:之前的2000个商品MA100计算,耗时0.006秒。


回主页