最新 | 最热门 | 最高评价

+0  Lua 的垃圾回收

Tag: Lua | 开源 | 软件开发
Singularity 发于 2013年10月27日 15:23 | 点击: 2956 | 展开摘要
这篇 blog 是最近研究 Lua 垃圾回收 (Gabage Collector) 的笔记整理。研究 Lua […]

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

+0  Lua 5.2 新增的分代 GC

Tag: lua与虚拟机
云风 发于 2013年09月26日 16:23 | 点击: 1117 | 展开摘要
以前我在 blog 写过 Lua 5.1 的 gc 代码分析 ,而 Lua 5.2 对这部分代码改动颇多,暂时也没有精力更新这个系列,先挑重点写吧。

Lua 5.2 的 GC 的最大改进是增加了一种叫 generational 的模式,Lua 的官方文档里是这样解释的。

As an experimental feature in Lua 5.2, you can change the collector's operation mode from incremental

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

+0  Closure 与 Unbound 变量

Tag: Lua | 软件开发
Singularity 发于 2013年09月08日 14:16 | 点击: 1661 | 展开摘要
大凡了解或编写过简单 Lisp 解释器的人都知道 unbound 变量这个概念。如下面这段代码 [1],对其中 […]

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

+0  Nginx与Gzip请求

Tag: Technical | Lua | Nginx
老王 发于 2013年09月02日 23:20 | 点击: 1274 | 展开摘要
前些天,移动端的同事跑来问:某些API需要传输大数据,Nginx服务器能否支持Gzip请求?一方面可以节省移动端流量;另一方面还可以加快传输速度,提升用户体验。对于Apache来说,利用SetInputFilter,可以很轻松的实现这个功能,那么Nginx如何做呢?

既然移动端发送的是Gzip请求,自然需要想想如何在服务端解压缩。搜索一下现成的Nginx的模块,发现和Gzip相关的模块有如下几个:

Gzip: Gzip responses.

Gzip Precompre

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

+0  去掉 full userdata 的 GC 元方法

Tag: lua与虚拟机 | 优化与技巧
云风 发于 2013年08月27日 11:13 | 点击: 1073 | 展开摘要
根据 Lua 文档中的说法,lightuserdata 比 fulluserdata 要廉价一些。那么,其中的区别在哪里呢?

空间开销上,fulluserdata 是一个 GC 对象,所以比 lightuserdata 要多消耗一点内存,这点内存往往对程序不造成太大的影响。

时间开销上,fulluserdata 在访问它时和 lightuserdata 并无太大区别,它们都只能通过元方法才能在 Lua 中使用。所有 lightuserdata 共用一个元表,不如 full

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

+0  coroutine 的回收利用

Tag: lua与虚拟机 | skynet
云风 发于 2013年07月25日 15:12 | 点击: 1024 | 展开摘要
这几天在 lua 和 luajit 的邮件列表上有人讨论 coroutine 的再利用问题。

前几天有个用 skynet 的同学给我写了封邮件,说他的 skynet 服务在产生了 6 万次 timeout 后,内存上升到了 50M 直到 gc 才下降。

这些让我重新考虑 skynet 的消息处理模块。skynet 对每条消息的相应都产生了一个新的 coroutine ,这样才能在消息处理流程中,可以方便的切换出去让调度器调度。诸如 RPC/ socket 读写这些 ap

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

+0  Programming in Lua(六)-Continuation

Tag: Lua | 开源 | 软件开发
Singularity 发于 2013年07月14日 08:29 | 点击: 1711 | 展开摘要
在之前的 blog 中 (三、五) 讨论了 Lua C APIs 的 continuation 概念。可以说 […]

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

+0  回调还是消息队列

Tag: lua与虚拟机
云风 发于 2013年07月04日 18:58 | 点击: 1180 | 展开摘要
前几天在做 Hive 的 socket 库的时候, 遇到一个问题很典型,我记得不是第一次遇到了。值得记录一下。

socket 底层有一个 poll 的 api ,通过 epoll 或 kqueue 或 select 取得一系列的事件。用 lua 怎么封装它呢?

一个比较直接的想法是注入一个 callback function ,对于每个事件回调一个 lua 函数。但这容易引起许多复杂的问题。因为回调函数很不可控,内部可能抛出异常,也可能引起函数重入,或是做了一些你不喜

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

+0  Hive , Lua 的 actor 模型

Tag: lua与虚拟机
云风 发于 2013年06月26日 19:10 | 点击: 5280 | 展开摘要
上个周末我一直在想,经过一年多在 skynet 上的开发,我已经有许多相关经验了。如果没有早期 erlang 版本的历史包袱以及刚开始设计 skynet 时的经验不足,去掉那些不必要的特性后的 skynet 应该是怎样的。

一个精简过代码的 skynet 不需要支持 Lua 之外的语言和通讯协议。如果某个服务的性能很关键,那么可以用 C 编写一个 Lua 库,只让 Lua 做消息分发。如果需要发送自定义协议的消息,可以把这个消息打包为一个 C 结构,然后把 C 结构指针

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

+0  MongoDB lua driver

Tag: lua与虚拟机
云风 发于 2013年06月18日 12:54 | 点击: 1175 | 展开摘要
唔,我知道有人已经做了 MongoDB 的 lua driver ,比如这个 。但我不想仅仅是对 C++ API 的封装,而想从协议层做起,这样日后可以方便改为异步模型,也好整合到 skynet 中去。

这里还有一份纯 Lua 的实现,是从协议层做的封装。但有几个问题,一是依赖 lua-socket 库,二是纯 lua 实现不如 C 库性能好,三是特性没有支持完整。

我曾经想在 C Driver 的基础上做封装。做的过程中发现 c driver 代码质量不高,且特性支持不

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

+0  写了一个 lua bson 库

Tag: lua与虚拟机
云风 发于 2013年06月14日 12:59 | 点击: 1948 | 展开摘要
在 bson 的官方网站上链接了一个纯 Lua 实现的 bson 库,但是实现的不完整。

我用 C 实现了一个 Lua bson 库。

bson 是为 MongoDB 设计的结构化数据序列化协议,所以有很多设定是为 mongodb 服务的,如果单用于序列化结构化数据,那么那些不一定要实现。但我写这个的最终目的是做一个 lua 的 mongo driver ,所以就实现的比较完整了。

bson 结构中,有一些固定长度的字段,修改它们不必重新编码。这在 mongDB 的通讯

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

+0  用栈方式管理 Lua 中的 C 对象

Tag: lua与虚拟机
云风 发于 2013年06月09日 15:52 | 点击: 901 | 展开摘要
最近思考了给 Lua 写 C 扩展的另一个问题。

我曾经总结过几种 Lua C 库中 C/C++ 对象的生命期管理问题 。最近想到另一个方案,虽然实现后并没有用到项目里,但值得记录一下。

Lua 没有 RAII ,一切对象的回收是依赖 GC 的。封装 C/C++ 对象则一般用 userdata 。userdata 比较重,作为临时对象使用总觉得有点别扭。比如封装 matrix 对象,如果我们为每个 matrix 对象都生成一个 userdata ,那么一些临时的 matr

查看全文: http://www.udpwork.com/item/9993.html
|<<<2345678>>>| 一共10页, 117条记录