skynet——sharetable学习

概念

进程内多 Lua VM 之间的数据共享机制

解决问题

skynet 每个服务是独立 Lua VM,如果 100 个服务各 load 一份 500KB 的配置表,就是 50MB 浪费。

演进过程

sharedata(老方案,云风早期设计)

实现思路

  1. 由一个 sharedatad服务把 table 序列化成 C 层的 lightuserdata​ 存起来

  2. 其他 VM 通过 sharedata.query(name)拿到这个指针

  3. 每个 VM 用 metatable 代理​ 从 lightuserdata 里查字段,并建 proxy 缓存已查过的 key

    配置表 → C 层 lightuserdata ←→ 各 VM 通过 metatable+proxy 访问

优点:惰性展开,初次 query 快,热更后旧数据易回收

缺点:每次访问要走 metatable → C → 回 Lua,proxy 随服务数膨胀,访问慢、内存占用随服务数涨

sharetable(2019 年后新方案)

直接改了 Lua VM 的实现,允许多个 VM 共享只读的原生 Lua table,且不参与 GC

优点:等价于访问本地 Lua table,无 metatable、无 proxy、不进 GC,实测比 sharedata 快 5~25 倍

缺点:热更麻烦------旧 table 要等所有引用服务退出才能释放;C 层内存占用更大

选型口诀

💡 不常更新的大配置用 sharetable,常更新的小配置用 sharedata

  • 数值表、道具表、技能表 → sharetable(一次加载反复读)

  • 运营活动配置、开关类 → sharedata(热更友好)

相关推荐
sunshine22 girl7 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea
Kobebryant-Manba8 小时前
学习Bert微调
人工智能·学习·bert
xian_wwq8 小时前
【学习笔记】深度认知系列-第14讲 端侧AI崛起——为什么AI正在从云端走向本地
人工智能·笔记·学习
我爱cope9 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
代码的小搬运工11 小时前
KVO学习
学习·ios·cocoa
辣知11 小时前
辣知·化智47 黄帝陵与民族精神归途
学习
知识分享小能手11 小时前
深度学习学习教程,从入门到精通,数值计算 — 知识点详解(4)
人工智能·深度学习·学习
zyf10441612 小时前
暑期实践日志 Day49:复盘题库出题成果,夯实章节考点
学习·计算机网络·剪辑·暑期实践·课题任务
kaixin_啊啊13 小时前
多模态学习
学习
m4Rk_14 小时前
【论文阅读】Agent 记忆机制(62):DCM-Agent——用双簇记忆化解优化问题的多范式冲突
论文阅读·人工智能·学习·开源·github