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

子线程渲染技术

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

算法:1、构造字典树            

           2、构造适配指针        

           3、匹配过程

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

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

            

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值