子线程渲染技术和AC自动机

简介: 子线程渲染技术和AC自动机

子线程渲染技术

原因:在玩家较多,且时装坐骑等差异化较大时,客户端帧率低,卡顿明显

思路:将渲染放在子线程进行,使逻辑处理和渲染可以同时进行,提高并行处理能力,提高客户端运行效率,提升帧率,缓解卡顿

方案:1、创建一个新的线程专门用来处理渲染逻辑          


          2、将主线程每一种渲染函数和一些设置渲染状态的方法都定义成一种渲染类型        


          3、每一个渲染类型对应一个渲染结构,包含渲染的数据和render方法          


           4、用std::array<std::vector<renderinfo*>, 2>这种结构来存储渲染数据,这样分开逻辑线程和渲染线程的访问冲突,逻辑线程向一个vector中写入数据,渲染线程从另一个已经写好的vector中读取数据执行渲染          


            5、逻辑线程和渲染线程执行速度会有差异,需要通过std::mutex互斥量来使两个线程协同工作(设置某个线程等待以及唤醒)


587a3cee84ed48fca0b2f4512e48b26b.png

问题3:游戏最小化、修改分辨率、锁屏等操作,恢复后显示异常 原因:这些操作会导致DX设备丢失,需要通过TestCooperativeLevel获得当前设备情况,正确调用ResetDevice()函数


注意:1、保证DX渲染接口的调用都在渲染线程执行          


         2、对渲染有影响的成员变量要区分逻辑线程和渲染线程      


         3、渲染顺序和以前主线程保持一致


结果:客户端机器人身上时装是随机的,不会移动、不释放技能        


          添加1024个机器人      以前帧数  21左右    现在帧数   45左右          


         添加2048个机器人      以前帧数  10左右    现在帧数   22左右


2。屏蔽字匹配优化:AC自动机(多模字符串匹配算法)


原因:屏蔽字是采用字符串匹配方式做的,屏蔽字列表文件就有好几个,并且有的文件屏蔽字字符串有接近2W行,效率低


算法:1、构造字典树            


          2、构造适配指针        


          3、匹配过程

image.png

结果:1、AC自动机的匹配效率要高很多      

          2、创建AC自动机所需要的内存较大 是一种空间换时间的算法

         

关于AC自动机的一些链接:

AC自动机(详解)_tweatherm的博客-CSDN博客_ac自动机

相关文章
SwiftUI—如何制作循环动画并指定动画的循环次数
SwiftUI—如何制作循环动画并指定动画的循环次数
540 0
SwiftUI—如何制作循环动画并指定动画的循环次数
|
2月前
|
小程序 算法 UED
【专栏】小程序图片合成就绪渲染的转变,从异步并发渲染到同步阻塞渲染
【4月更文挑战第29天】本文探讨了小程序图片合成就绪渲染的转变,从异步并发渲染(提高效率,并发处理但可能导致资源竞争和顺序难控)到同步阻塞渲染(顺序可控,资源管理更精细,可能引起界面卡顿)。同步阻塞通过任务队列和阻塞机制确保顺序,解决并发问题。注意避免长时间阻塞,及时释放资源,优化任务效率,并结合异步处理。选择合适方案取决于实际需求,以平衡效率与一致性。
|
2月前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
20 1
|
2月前
|
存储 编译器 C++
【函数栈帧解析:代码的迷人堆积和无限嵌套】(下)
【函数栈帧解析:代码的迷人堆积和无限嵌套】
|
2月前
|
存储
【函数栈帧解析:代码的迷人堆积和无限嵌套】(上)
【函数栈帧解析:代码的迷人堆积和无限嵌套】
|
2月前
|
JavaScript 前端开发
js事件循环机制理解
js事件循环机制理解
23 1
|
11月前
|
Go 调度
动图图解!怎么让goroutine跑一半就退出?
动图图解!怎么让goroutine跑一半就退出?
100 0
|
11月前
|
Java
多线程交替输出A1B2C3D4...你怎么实现?
多线程交替输出A1B2C3D4...你怎么实现?
68 0

热门文章

最新文章