您现在的位置:首页 --> 查看专题: Lua
今天来看一下 mark 过程是怎样实现的。 所有的 GC 流程,都从 singlestep 函数开始。singlestep 就是一个最简单的状态机。GC 状态简单的从一个状态切换到下一个状态,循环不止。状态标识放在 global state 的 gcstate 域中。这一点前面以前谈过。 开始的两个状态和 mark 过程有关。 初始的 GCSpause 状态下,执行 markroot 函数。我们来看一下 markroot 的代码。
有了前几天的基础,我们可以从顶向下来读 lua gc 部分的代码了。 我们知道,lua 对外的 API 中,一切个 gc 打交道的都通过 lua_gc 。C 语言构建系统时,一般不讲设计模式。但模式还是存在的。若要按《设计模式》中的分类,这应该归于 Facade 模式。
早期的 Lua GC 采用的是 stop the world 的实现。一旦发生 gc 就需要等待整个 gc 流程走完。如果你用 lua 处理较少量数据,或是数据增删不频繁,这样做不是问题。但当处理的数据量变大时,对于实时性要求较高的应用,比如网络游戏服务器,这个代价则是不可忽略的。lua 本身是个很精简的系统,但不代表处理的数据量也一定很小。 从 Lua 5.1 开始,GC 的实现改为分步的。虽然依旧是 stop the world ,但是,每个步骤都可以分阶段执...
最近发现在大数据量的 lua 环境中,GC 占据了很多的 CPU 。差不多是整个 CPU 时间的 20% 左右。希望着手改进。这样,必须先对 lua 的 gc 算法极其实现有一个详尽的理解。我之前读过 lua 的源代码,由于 lua 源码版本变迁,这个工作还需要再做一次。这次我重新阅读了 lua 5.1.4 的源代码。从今天起,做一个笔记,详细分析一下 lua 的 gc 是如何实现的。阅读代码整整花掉了我一天时间。但写出来恐怕比阅读时间更长。我会分几天写在 b...
前段时间在玩 Go ,非常喜欢 goroutine 的编程模型。采用 chan 进行 thread 间的通讯写起来很舒适。今天花了一个下午,为 lua 写了一个简单的库,模拟这种编程方式。暂且把这个东西叫作 lua cothread 。它基于 lua 的 coroutine ,只是写了个简单的调度器。这个库有如下几个 api :
Google 的 Jeff Dean 同学说,设计分布式系统一定要有 Protocol Description Language。Google Proto Buffers 的意义在于,定义了一个不错的 PDL 。protobuffers 的实现反而不那么重要了。这几天我一直在倒腾 lua 下的 proto buffers 的支持。一直在思考,怎样的接口才是最适合 lua 使用的。大多数语言下的 proto buffers 实现,都是将编码的数据块展开成本地语言的数据结构。对于 C/C++ ,这是最高效的形式。但对于动态语言,那就...
[ 共26篇文章 ][ 第2页/共2页 ][ 1 ][ 2 ]
近3天十大热文
- [46] 界面设计速成
- [40] Oracle MTS模式下 进程地址与会话信
- [40] 视觉调整-设计师 vs. 逻辑
- [37] IOS安全–浅谈关于IOS加固的几种方法
- [36] 如何拿下简短的域名
- [36] 程序员技术练级攻略
- [35] android 开发入门
- [35] 图书馆的世界纪录
- [35] 【社会化设计】自我(self)部分――欢迎区
- [32] 读书笔记-壹百度:百度十年千倍的29条法则
赞助商广告