最新 | 最热门 | 最高评价

+0  缓存在 Lua 中的配置表

Tag: ECS | lua与虚拟机
云风 发于 2021年06月09日 20:00 | 点击: 458 | 展开摘要
最近在尝试做一个类似异星工厂的游戏原型。由于最终希望在内存有限的手机上运行,所以不得不考虑内存如何有效利用的问题。

这是因为,我在玩异星工厂(加上一些 mod )时,发现 PC 内存能占到 10G 以上,且这些内存大部分都不是图像资源,是实打实的逻辑数据。我稍微估算了一下,在一些内容丰富的 mod 中,游戏内的对象能够达到数十万,甚至上百万之多。用传统方法使用的内存势必以 G 计算。

如果希望同样的逻辑跑在手机上,我希望把逻辑数据控制在 500M 之下。除了从游戏玩法做做

查看全文: http://www.udpwork.com/item/17874.html

+0  扩展 Lua 的常量类型

Tag: lua与虚拟机
云风 发于 2021年04月25日 11:23 | 点击: 431 | 展开摘要
最近有点关于 Lua 不成熟的想法。

Lua 目前函数原型的常量表只支持了布尔、数字和字符串类型的常量。而 table function 这些是不会存在于常量表中的。

我想,如果常量如果不限于前三种类型,可能会更好一些。比如,一个惯用法是在代码前面写上

local pairs = pairs

这个惯用法是基于 local 变量比全局变量少一次 hash 表查询,性能可能会高一点。 但实际上,往往差距并不大。而这种写法还会给其它应用 pairs 的函数增加额外的 upv

查看全文: http://www.udpwork.com/item/17509.html

+0  ltask :Lua 的多任务库

Tag: lua与虚拟机 | skynet
云风 发于 2021年02月07日 17:22 | 点击: 397 | 展开摘要
ltask 是我前两周实现的一个 lua 的多任务库 。

这个项目复用了我之前的一个类似项目的名字 。目的是一样的,但是我做了全新的设计。所以我干脆将以前的仓库移除,以同样的名字创建了新的仓库。

和之前的版本设计不同。在消息通讯机制上,这个更接近 skynet 的模型,但它是一个库而不是一个框架。调度模块是按前段时间的想法实现的,不过只做了一个初步的模型,细节上还有一些工作待完善。

它的 C 部分提供的库被分为四个部分:

ltask

ltask.bootstrap

查看全文: http://www.udpwork.com/item/17514.html

+0  遭遇lj_str_new

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月15日 20:18 | 点击: 431 | 展开摘要
话说前几天我刚通过 mlcache 优化了热数据的问题,屁股还没坐热乎呢,就发现系统性能又下降了,本着自己挖的坑含泪也要填上的原则,我再一次开始了性能调优之旅。

对某个 nginx 进程执行 perf top

毫无疑问,从 perf top 结果来看,lj_str_new 已经成为了性能最大的短板。不过我们还是要搞一个 lua 语言级别的火焰图看着才靠谱,于是有了下图:

优化前的火焰图

不出所料,lj_str_new 非常宽,不过没有更详细的调用栈信息,不方便判断问题

查看全文: http://www.udpwork.com/item/17716.html

+0  记一次性能调优

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月12日 16:45 | 点击: 406 | 展开摘要
面对性能调优问题,很多人往往只是单纯的套用既往的经验:先试试一个,不行再试试另一个。面对简单的问题,如此通常能事半功倍;但是当面对复杂问题的时候,单凭经验往往并不能达到立竿见影的效果,此时我们需要更精准的判断性能短板在哪里。

一个 openresty 项目,不了解 openresty 的可以参考我以前的文章,从 top 运行结果看,软中断 si 分配不均,绝大部分压在了 CPU5 上,导致 CPU5 的空闲 id 接近于零,最终的结果是其它 CPU 虽然还有空闲 id,但是

查看全文: http://www.udpwork.com/item/17717.html

+0  lua 5.4 可能会增加 to-be-closed 特性

Tag: lua与虚拟机
云风 发于 2018年12月18日 10:46 | 点击: 1599 | 展开摘要
如果你有关注 lua 在 github 上的仓库,就会发现,最近一段时间增加了一个新特性:to-be-closed 的 local 变量。

鉴于历史上 lua 每次的大版本开发过程中都会增加很多有趣的特性,却无法保持到版本正式发布。本文也只是介绍一下这个有趣的特性,并不保证它一定会被纳入语言标准。正式的发布版中即使有这个特性,语法上也可能有所不同。

我认为 Lua 加入这个特性的动机是它缺乏 RAII 机制。过去,我们必须用 pcall 来确保一段代码运行完毕,然后再清

查看全文: http://www.udpwork.com/item/17243.html

+0  Lua 的多线程支持

Tag: lua与虚拟机
云风 发于 2018年10月21日 15:38 | 点击: 1853 | 展开摘要
单个 Lua 虚拟机只能工作在一个线程下,如果你需要在同一个进程中让 Lua 并行处理一些事务,必须为每个线程部署独立的 Lua 虚拟机。

ps. 在少量多线程应用环境,加锁也是可行的。你可以在编译时自定义 lua_lock(L) 和 lua_unlock(L) 去调用操作系统的锁。

比较成熟的 lua 多线程库有 Lanes 和 Effil 。它们都试图隐藏多虚拟机的细节,让用户使用起来好像多线程在使用同一个虚拟机一样。比如 Effil 就用了 effil.table

查看全文: http://www.udpwork.com/item/17158.html

+0  Lua GC 的工作原理

Tag: lua与虚拟机
云风 发于 2018年10月10日 04:19 | 点击: 1688 | 展开摘要
上次在 blog 上写 Lua GC 是 2011 年,lua 5.2 尚未发布时候的事情了。我认为仔细研读优秀开源代码是非常值得做的事情,但把研读过程写出来却意义不大。代人咀嚼这事吃力不讨好,每个人的技术背景不同,写得过细浪费阅读时间,写的粗糙又会使读者不得要领。一行行读代码本就只是件辛苦活,任何人沉下心来都能做到,想通过别人代读而节省时间,多半是做不到的。所以我那本 Lua 源码欣赏 也就一直搁置了。

沉在代码的逐行细节中往往一叶障目,反不如高屋建瓴的理解一下作者的思

查看全文: http://www.udpwork.com/item/17125.html

+0  Lua 虚拟机的封装

Tag: lua与虚拟机 | 游戏开发
云风 发于 2018年08月15日 16:06 | 点击: 2483 | 展开摘要
我打算就我们在开发客户端引擎框架时最近遇到的两个问题写两篇 Blog ,这里先谈第一个问题。

我们的框架技术选型是用 Lua 做开发。和很多 C++ 开发背景(现有大部分的游戏客户端引擎使用 C++ 开发)的人的认知不同,我们并不把 Lua 作为一个嵌入式脚本来看待,而是把它当成一种通用语言来设计整个引擎框架。

其实这更接近 HTML5 流行之后,用 javascript 设计游戏引擎框架:虽然 javascript 的虚拟机本身是用 C++ 开发的,但和游戏引擎相关的部

查看全文: http://www.udpwork.com/item/17003.html

+0  数学运算的实时编译及 Lua 中的一点奇技淫巧

Tag: lua与虚拟机 | 算法 | 优化与技巧
云风 发于 2018年07月12日 11:24 | 点击: 1452 | 展开摘要
我为 3d engine 项目设计的向量运算库 已经用了一段时间了。在使用过程中也一直在改进 。从一开始,我就考虑过,这个库的设计主要考量是减少 lua 和 C 交互间的开销,提高内聚性。而易用性方面,计划再上面再做封装。这段时间继续在想怎样从更自然的表达形式转换到这个库的逆波兰指令流上。

大致的方向有两个:

其一,实现一个小语言,用字符串输入表达式组。

其二,利用 Lua 已有的语法解析设施,把 lua 的一个函数翻译成对应的数学运算指令流。

两者都可以看成是一种

查看全文: http://www.udpwork.com/item/16947.html

+0  Lua 5.4 的改进及 Lua 的版本演进

Tag: lua与虚拟机
云风 发于 2018年04月09日 18:42 | 点击: 2292 | 展开摘要
Lua 社区最近的一件大事是 Lua 5.4 的 work1 版本发布了。

这次的首发版本中引入了一个试验性的新特性,用来解决将 nil 放入数组的问题。因为是实验性特性,所以开发组决定默认关闭,必须在编译源代码的时候定义 LUA_NILINTABLE 这个宏才能开启。注意:默认是不开启的,后面的讨论都以这个为基础。

在邮件列表的讨论中,有不少人引入了不必要的激烈情绪,反对这种影响兼容性的改变。 Roberto 同学看起来是生气了,用全大写字母又重新强调了一次。当然虽然也

查看全文: http://www.udpwork.com/item/16778.html

+0  提高 lua 处理向量运算性能的一点尝试

Tag: lua与虚拟机 | 优化与技巧 | 语言与设计
云风 发于 2018年02月08日 11:42 | 点击: 2138 | 展开摘要
如果用纯 lua 来做向量/矩阵运算在性能要求很高的场合通常是不可接受的。但即使封装成 C 库,传统的方法也比较重。若把每个 vector 都封装为 userdata ,有效载荷很低。一个 float vector 4 ,本身只有 16 字节,而 userdata 本身需要额外 40 字节来维护;4 阶 float 矩阵也不过 64 字节。更不用说在向量运算过程中大量产生的临时对象所带来的 gc 负担了。

采用 lightuserdata 在内存额外开销方面会好一点点,但是

查看全文: http://www.udpwork.com/item/16623.html
|<<<1234567>>>| 一共11页, 128条记录