CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
性能调优

【性能调优】延迟结算:非紧急任务的队列消化

2026-09-22 21:07 作者:996 技术组 0 阅读 性能调优

实战应用:用在哪里

不是每一件事都要立刻做完:掉落的归属结算、邮件的批量投递、排行榜的更新——非紧急的任务进队列慢慢消化,玩家的关键路径(攻击、移动)永远优先。延迟结算是性能的调度学。

队列的骨架

lua

---延迟结算:优先级的任务队列
local Queue = { high = {}, normal = {}, low = {} }

function Queue.push(priority, fn)
    table.insert(Queue[priority], fn)
end

setontimerex(110, 1)
function Queue.drain()
    -- 每秒的预算 50 毫秒
    local budget = 0.05
    local t0 = os.clock()
    for _, lvl in ipairs({ "high", "normal", "low" }) do
        while #Queue[lvl] > 0 do
            local fn = table.remove(Queue[lvl], 1)
            local ok, err = pcall(fn)
            if not ok then
                Ops.alert("延迟任务异常: " .. tostring(err))
            end
            if os.clock() - t0 > budget then
                return     -- 预算耗尽,下轮继续
            end
        end
    end
end

队列的三级优先:高(交易与支付的结算)、中(掉落的归属与邮件)、低(排行榜与统计的更新),每秒的消化预算 50 毫秒——预算的墙让队列的消化永远不挤占玩家的关键路径。任务用闭包入队:结算所需的上下文在入队时捕获,到点执行时自带全部的原料。异常的隔离用 pcall:单个任务的报错不拖垮队列的整轮消化。

时效的保障

lua

---延迟的时效:掉落归属的 3 秒上限
function Drop.delayedSettle(bossId)
    Queue.push("high", function()
        local owner = BossDamage.owner(bossId)
        if owner then
            BossDrop.assign(bossId, Drop.listOf(bossId))
        end
    end)
end

---队列的积压监控
setontimerex(111, 5)
function Queue.monit()
    local total = #Queue.high + #Queue.normal + #Queue.low
    if total > 2000 then
        Ops.alert("队列积压", total)
    end
end

延迟有时效的分级:掉落的归属 3 秒内必须结算(玩家盯着地上等裁决)、邮件的投递 5 分钟内、统计的更新容忍 1 小时——时效的承诺写进每类任务的注册,超时的任务升级优先级。积压的监控在 2000 条的警戒线:积压的突增说明产出的速度超过消化的能力,预算的上调或任务的降频二选一。延迟结算的正确性靠上下文的快照:入队时捕获的数据(BOSS 的伤害表、掉落的清单)在结算时依然有效,变化的中间态用版本号丢弃过期的任务。

验证与监控

队列的消化延迟分位监控:入队到执行的耗时分布,各优先级各自的 P95 对齐时效的承诺;预算的使用率统计,预算长期打满即是扩容的信号。

踩坑记录

预算的检查曾经放在任务完成后,单个慢任务把一秒的预算全部吃光,前置的预算判断修复。闭包捕获的上值曾经在入队后被释放,结算时的空引用,上下文的快照化替代引用捕获。队列的优先级曾经只有两级,统计类的低优任务饿死在交易的高峰,三级的分层让低优也有活路。

上线要点

任务的时效分级注册进队列的接入文档,每类任务有自己的承诺。预算的毫秒数随在线的规模配置,高峰的动态调整有预案。队列的积压量与消化的速率进性能的看板,调度的健康一屏可见。

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

工具链

【工具链】风格检查器:Lua 脚本命名与规范的自动审查

实战应用:用在哪里 脚本的规范靠人盯盯不过来:命名风格漂移、全局变量乱用、缩进混着来——风格检查器把这些规则的执行自动化。提…

2026-09-22 22:32 996 技术组 · 0 阅读
界面UI

【界面UI】拍卖行界面:出价流程与截拍提醒

实战应用:用在哪里 拍卖行的出价是一场与时间的博弈:出价的按钮、倒计时的紧迫、截拍瞬间的悬念——拍卖界面的要点是出价的流程、…

2026-09-22 21:12 996 技术组 · 0 阅读
框架设计

【框架设计】幸运值机制:强化失败的隐性补偿

实战应用:用在哪里 强化连败七次是什么体验?幸运值机制给失败的玩家一个隐性的承诺:每次失败累加幸运值,幸运值越高下一次的成功…

2026-09-22 21:12 996 技术组 · 0 阅读
安全加密

【安全加密】日志防篡改:哈希链与异地备份

实战应用:用在哪里 审计日志的价值在于不可抵赖:被改过的日志比没有日志更危险——纠纷的追溯、内部的追责都建立在「日志没被动过…

2026-09-22 21:12 996 技术组 · 0 阅读
性能调优

【性能调优】批量邮件:活动奖励的分批投递

实战应用:用在哪里 活动结束给 3 万玩家发奖励:一次性群发让邮件表瞬间多 3 万行、投递的队列堵塞正常的通信。批量邮件的分…

2026-09-22 21:12 996 技术组 · 0 阅读
网络通信

【网络通信】面对面交易:握手、锁定与确认的协议

实战应用:用在哪里 面对面的交易是传奇最经典的交互:两人面对面、各自放入物品与金币、双方确认后成交。交易的协议要点是会话的建…

2026-09-22 21:12 996 技术组 · 0 阅读