会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
lindx
博客园
首页
新随笔
联系
订阅
管理
上一页
1
2
3
2023年8月1日
lua5.3 gc写屏障分析(3)
摘要: 在 GC 的扫描过程中,由于分步执行,会出现一些已经被扫描过了,被标记为 黑色 black 的对象,再引用到其他新的对象。比如,表 table 就是最容易出现这种情况的。那这种 black 对象再引用其他白色对象,lua是怎么处理的呢? lua gc 使用两种方式解决,一种是 barrier bac
阅读全文
posted @ 2023-08-01 11:11 墨色山水
阅读(70)
评论(0)
推荐(0)
2023年7月29日
lua5.3 gc弱表分析(4)
摘要: 前言 虽然平时用到弱表的地方不是很多,但去了解下它的设计实现也是好的。 我们是在标记阶段,才会去触发 propagatemark(),将一个灰色对象标记为黑色,然后再去遍历其引用到的其他对象,将其他对象都 mark gray,并加入灰色链表,如此反复,直到 灰色链表为空,才进入到原子阶段。 /* *
阅读全文
posted @ 2023-07-29 22:42 墨色山水
阅读(98)
评论(0)
推荐(0)
2023年7月21日
lua5.3 gc标记阶段分析(2)
摘要: 对象创建 对于可回收的对象(TString,Table,Udata,Closure,Proto,lua_State),它们的创建流程基本相同,都是调用 luaC_newobj 接口的。举例,我们可以通过观察代码 table 的创建流程,可以得出,每个可回收的对象,都是由一个 GCObject 结构体
阅读全文
posted @ 2023-07-21 17:19 墨色山水
阅读(97)
评论(0)
推荐(0)
2023年7月12日
lua5.3 gc总览分析(1)
摘要: lua可回收对象 lua从堆中申请内存以及释放,都是通过gc垃圾回收器来管理的。 lua可回收的内存对象有:TString(字符串),Table(表),Udata(用户数据),Closure(分为lua闭包和c闭包),Proto(函数原型),lua_State(线程) /* ** 在 lstate.
阅读全文
posted @ 2023-07-12 16:51 墨色山水
阅读(143)
评论(0)
推荐(2)
2023年6月4日
lua5.3 table实现
摘要: 数据结构 lua 中的 table 存储分为数组部分和哈希表部分。 数组部分就是一块连续的内存,每个元素类型都是 TValue,而哈希表部分,也是采用一块连续的内存块来存储每个节点Node,节点Node包含了key和value,如图: // hash 表中 node 的键数据结构 typedef u
阅读全文
posted @ 2023-06-04 18:13 墨色山水
阅读(214)
评论(0)
推荐(0)
2023年5月20日
lua5.3字符串实现
摘要: TString结构体 我们平时在 lua 中使用到的字符串,在底层对应的数据结构是长什么样的,抱着好奇的心态去了解下。我们先写个最简单的字符串赋值语句 local name = "zhangsan" 接着看看这行代码对应的指令: main <tc.lua:0,0> (2 instructions a
阅读全文
posted @ 2023-05-20 18:37 墨色山水
阅读(318)
评论(0)
推荐(1)
2023年5月10日
时间轮
摘要: 介绍 第一次看到时间轮定时器实现是在 skynet 中,源码:skynet_timer.c 什么是时间轮,我觉得可以从我们生活中使用到的时钟来介绍,更形象些,比如,我们明天早上9点上班,这就像一个定时任务,到某个时间点做某件事。转成计算机数据结构,我们可以用三个数组来存储时钟秒针,分针,时针对应的定
阅读全文
posted @ 2023-05-10 21:56 墨色山水
阅读(91)
评论(0)
推荐(0)
2023年5月7日
aof 数据持久化
摘要: aof 介绍 在redis运行期间,不断将修改命令写入到文件中,实现持久化(注意,只有写命令,才会持久化到文件中,读命令没必要写入到文件中)。在redis重启后,只需要将这些写命令再执行一次,就可以恢复数据。 触发时机 在 redis.conf 配置文件中设置: # 开启AOF appendonly
阅读全文
posted @ 2023-05-07 22:50 墨色山水
阅读(38)
评论(0)
推荐(0)
上一页
1
2
3