最新 | 最热门 | 最高评价

+0  内存安全的 Lua api 调用

Tag: lua与虚拟机
云风 发于 2014年04月01日 17:15 | 点击: 1198 | 展开摘要
Lua 的 API 设计的非常精良,整个 lua 核心库把内存管理都托管给了 lua_Alloc 这个用户注入的函数。任何时候在发生内存不足,lua 的 api 都可以正确处理异常。

考虑一下 lua_newtable 或是 lua_pushlstring 这些 api ,它们都需要创建新的 gcobject ,这些时候如果发生 lua_Alloc 分配不出内存怎么办?这些 api 可都是无返回值的。

lua 的行为是:抛出一个内存错误,如果外界没能捕获这个错误,则触发

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

+0  在不同的 lua vm 间共享 Proto

Tag: lua与虚拟机 | skynet
云风 发于 2014年03月27日 11:43 | 点击: 1209 | 展开摘要
在 skynet 这种应用中,同一个系统进程里很轻易的就会创建数千个 lua 虚拟机。lua 虚拟机本身的开销很小,在不加载任何库(包括基础库)时,仅几百字节。但是,实际应用时,还需要加载各种库。

在 lua 虚拟机中加载 C 语言编写的库,同一进程中只会存在一份 C 函数原型。但 lua 编写的库则需要在每个虚拟机中创建一份拷贝。当有几千个虚拟机运行着同一份脚本时,这个浪费是巨大的。

我们知道,lua 里的 function 是 first-class 类型的。lua

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

+0  通过FastCGI Cache实现服务降级

Tag: Technical | Lua | Nginx
老王 发于 2014年01月13日 11:29 | 点击: 1610 | 展开摘要
在自然界中,很多生物面临生死考验的时候,往往会做出惊人的反应,其中最为大家熟知的当属壁虎,危难关头,与其坐以待毙,不如断尾求生,通过自残来换取活下去的希望。对于互联网项目而言,同样存在着很多生死考验,比如:访问量激增;数据库宕机等等,此时如果没有合理的降级方案,那么结局必然是死路一条。

任何问题一旦脱离了实际情况,便失去了讨论的意义。在继续之前,不妨先介绍一下案例的背景情况:一个PHP网站,以读为主,原本躲在CDN后面,运行很稳定,后来新增了很多强调个性化的需求,便去掉了C

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

+0  Lua 远程调试器

Tag: lua与虚拟机
云风 发于 2013年12月30日 18:18 | 点击: 1545 | 展开摘要
我们现在的手游完全用 Lua 开发,这就有了调试的需要。

今年曾写过一个 lua 代码跟踪器,主要是用于服务器开发。服务器程序不适合完全 stop the world 慢慢调试,以输出 log 为主。但现在在客户端,那么一个类 gdb 的调试环境更好一些。

lua 的调试器在我还在网易时就做过 。从网易出来后没带代码,需要用就要重新写了。好在 lua 的 debug 接口非常全,今天花了 2 个小时就重新实现了一个简陋的雏形。

这是一个远程调试器,启动程序的时候利用 l

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

+0  Lua简明教程

Tag: 杂项资源 | 编程工具 | 编程语言 | C++ | Javascript | Lua
陈皓 发于 2013年12月03日 08:29 | 点击: 9352 | 展开摘要
这几天系统地学习了一下Lua这个脚本语言,Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,这是多么地变态啊(/bin/sh都要1M,MacOS平台),而且能和C语言非常好的互动。我很好奇得浏览了一下Lua解释器的源码,这可能是我看过最干净的C的源码了。

我不想写一篇大而全的语言手册,一方面是因为已经有了(见本文后面的链接),重要的

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

+0  Lua 的垃圾回收

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

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

+0  Lua 5.2 新增的分代 GC

Tag: lua与虚拟机
云风 发于 2013年09月26日 16:23 | 点击: 1228 | 展开摘要
以前我在 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 | 点击: 1809 | 展开摘要
大凡了解或编写过简单 Lisp 解释器的人都知道 unbound 变量这个概念。如下面这段代码 [1],对其中 […]

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

+0  Nginx与Gzip请求

Tag: Technical | Lua | Nginx
老王 发于 2013年09月02日 23:20 | 点击: 1435 | 展开摘要
前些天,移动端的同事跑来问:某些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 | 点击: 1220 | 展开摘要
根据 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 | 点击: 1132 | 展开摘要
这几天在 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 | 点击: 1852 | 展开摘要
在之前的 blog 中 (三、五) 讨论了 Lua C APIs 的 continuation 概念。可以说 […]

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