编程文汇

高负载环境用lua写业务逻辑

这是个ppt,讲述了嵌入使用lua的大致方式。
原文:Lua as a business logic language in high load application

要点:

  1. Worker thread per CPU core ,每个cpu内核一个线程
  2. One Lua interpreter state per worker,每个线程一个lua state
  3. Multiple coroutines in each Lua interpreter state,每个lua state中使用多协程
  4. New HTTP request → new coroutine in idle Lua interpreter state, 每个http请求启动一个协程

这里的用法个人觉得还是很合理的。

踩坑:

  1. 内存
    1. lua state之间不能共享数据
    2. 使用越多的cpu内核,就会占用更多内存;产品越庞大,内存占用越大
    3. 64位linux,32位luajit,可用4g内存,64位luajit只能用1G
  2. 把内存占用移动到c:
    1. 可以利用userdata+元表的方式把c对象暴露给lua,与lua本地代码相比效率不高,因为所有访问都是c函数调用。
    2. 利用jit的cdata,这是ffi提供的手段,如果jit编译了你的代码,效率就很高,否则效率很低。(ffi有jit :普通lua : ffi无jit分别花费的时间为:1.5 ,5.9, 55)。
    3. 使用编译trace,查找自己的代码为什么被jit。

记得之前看过另外一个ppt,好像是c和c#交互的,使用了类似的技术。