第二章 内核机制:主循环与内存


第二章 · 内核机制:主循环与内存

章节摘要:本章的线索是一秒钟内发生的事——游戏跑起来的每一秒,主循环转几十圈,每圈采集输入、推进物理、跑脚本、提交渲染;同时成百上千个对象在创建与销毁,引用计数默默记账。看懂这两件事,"游戏为什么卡"、"对象为什么没了"这类问题就有了推理的起点。

一条主线

想象你把游戏慢放一万倍,盯着一帧的画面看:这一帧里,引擎先收下键盘与手柄的状态,再让物理服务器把世界推进一步,然后挨个调用场景树上万节点的处理函数,最后把绘制指令打包交给渲染服务器。下一帧,一切重来。本章沿这条时间线走两站:第一站拆主循环本身——帧的节拍、两类处理回调的分工、以及引擎把渲染物理音频拆成若干"服务器"的分层智慧;第二站离开时间轴,看空间维度的另一场戏——对象如何在引用计数下生老病死、资源如何被缓存复用、内存泄漏与悬空调用从何而来。

沿途站点

  • 2.1 主循环与服务器架构:帧循环的全景次序、两种处理回调怎么选、服务器架构为何用 RID 间接引用一切。
  • 2.2 内存管理与对象生命周期:引用计数的规则与例外、销毁节点的安全姿势、资源缓存的行为与泄漏排查思路。

两节的分工可以这样记:2.1 管"什么时候",2.2 管"活多久"。它们是同一台机器的时间轴与空间轴,合在一起才构成完整的内核地图。

章内还有两处交叉引用值得留意:帧次序是理解排队销毁的前提(拆除被推迟到帧末的安全时点),引用计数是理解信号自动清理的前提(弱引用机制)。机理与机理之间彼此咬合,这也是把它们放进同一章的理由。

拐点与结论

本章的认知转折在于:把引擎从"黑箱"翻成"流水线"。帧不是瞬间,是一段有严格次序的工序;对象不是凭空消失,而是引用归零即拆。两个结论值得带走——写逻辑时永远问自己"这段代码跑在帧的哪个阶段";删对象时永远问"这一帧还有谁会碰到它"。养成这两个反射,一半的"玄学故障"会自动现形。

给急于上手的人一句安心话:本章两节都偏机理,不背下来也不影响你照着第 5 章把游戏做出来。但等你遇到"速度随帧率漂移"、"对象莫名被释放"这类问题时,一定要回来重读——那两类问题的完整解释都在本章,而且是能从头推导出来的解释,不是玄学。学习引擎内核的正确节奏是:先用,再疑,再回来验证机理。

读完你应该

  • 能按次序说出一帧内输入、物理、逻辑、渲染的发生顺序
  • 能判断一段逻辑该放进处理回调还是物理处理回调,并说出理由
  • 能解释 RID 间接引用如何让脚本与渲染线程解耦
  • 能手算一个简单对象图的引用计数,判断对象何时被释放
  • 能说出 queue_free 与直接释放的区别,以及资源缓存对内存占用的双面影响

本章知识点清单

对照自查用:一帧内五道工序的先后与三条推论;固定物理步长与可变渲染帧的分工依据;帧间隔系数在增量计算中的角色;服务器家族的成员名单与 RID 间接引用的三样收益;引用计数的记账规则与常见持有人清单;节点类为何是计数制的例外;排队销毁与立即销毁的时机差异;孤儿节点的产生条件与防治;资源共享语义带来的"改一处动全身"现象;缓存导致的"重载同名同份"行为。每一条都能在两节正文里找到推导过程,不是孤立结论。

下一章的接力

机器的节拍与生死规则清楚了,第 3 章回到我们真正天天打交道的层面:节点、场景与信号——把第 1 章的哲学变成上手的操作。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U