趣果有间

凡人皆无法挡


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

深入 Lua Garbage Collector(六)

发表于 2017-04-17 | 阅读次数

深入 Lua Garbage Collector(五)

发表于 2017-04-16 | 阅读次数

有了前几天的基础,我们可以从顶向下来读 lua gc 部分的代码了。
慢慢的,感觉我这个系列都可以叫跟着云风一起看Lua源码了,虽然自己看的是最新的5.3。挖个坑,之后应该会真的跟着云风大大的那本readinglua一起看完lua的最新源码。

阅读全文 »

深入 Lua Garbage Collector(四)

发表于 2017-04-15 | 阅读次数

早期的 Lua GC 采用的是 stop the world 的实现。一旦发生 gc 就需要等待整个 gc 流程走完。如果你用 lua 处理较少量数据,或是数据增删不频繁,这样做不是问题。但当处理的数据量变大时,对于实时性要求较高的应用,比如网络游戏服务器,这个代价则是不可忽略的。lua 本身是个很精简的系统,但不代表处理的数据量也一定很小。

从 Lua 5.1 开始,GC 的实现改为分步的。虽然依旧是 stop the world ,但是,每个步骤都可以分阶段执行。这样,每次停顿的时间较小。随之,这部分的代码也相对复杂了。分步执行最关键的问题是需要解决在 GC 的步骤之间,如果数据关联的状态发生了变化,如果保证 GC 的正确性。GC 的分步执行相对于一次执行完,总的时间开销的差别并不是零代价的。只是在实现上,要尽量让额外增加的代价较小。

GC流程

先来看 GC 流程的划分。


阅读全文 »

深入 Lua Garbage Collector(三)

发表于 2017-04-14 | 阅读次数

Lua 源码

阅读的源码来自 lua-5.3.0

阅读全文 »

深入 Lua Garbage Collector(二)

发表于 2017-04-14 | 阅读次数

这一篇我们主要介绍一下 Lua 的 GC 机制

Lua垃圾回收器函数

Lua 提供了以下函数 collectgarbage ([opt [, arg]]) 用来控制自动内存管理:

  • collectgarbage(“collect”): 做一次完整的垃圾收集循环。通过参数 opt 它提供了一组不同的功能:

  • collectgarbage(“count”): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。

  • collectgarbage(“restart”): 重启垃圾收集器的自动运行。

  • collectgarbage(“setpause”): 将 arg 设为收集器的 间歇率 。 返回 间歇率 的前一个值。

  • collectgarbage(“setstepmul”): 返回 步进倍率 的前一个值。

  • collectgarbage(“step”): 单步运行垃圾收集器。 步长”大小”由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。

  • collectgarbage(“stop”): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。

阅读全文 »

深入 Lua Garbage Collector(一)

发表于 2017-04-13 | 阅读次数


看到一个 Bob Nystrom 写的 C 语言实现的 Garbage Collector

借着这个小程序顺便深入地了解一下Lua的垃圾回收机制

阅读全文 »

Linux下的的轻量级HTTP服务器实现

发表于 2017-03-31 | 阅读次数

小型HTTP服务器

读了很多 Linux 下小型的 http 服务器,还是觉得来自朱家顺的Zaver比较适合新手学习

Zaver,一个结构简单,支持高并发的http服务器。基本架构是事件循环 + non-blocking I/O + 线程池。Zaver的代码风格参考了Nginx的风格,所以在可读性上非常高。另外,Zaver提供了配置文件和命令行参数解析,以及完善的Makefile和源代码结构,也可以帮助任何一个C初学者入门一个项目是怎么构建的。

阅读全文 »

Linux内核设计与实现(七)一一中断处理的下半部

发表于 2017-03-10 | 阅读次数

1…456…10
kelele67

kelele67

古老却神奇的shell表白代码 :(){:|:&};:

74 日志
71 标签
GitHub 微博 知乎
© 2017 kelele67
由 Hexo 强力驱动
主题 - NexT.Pisces