在AI结构中用双缓冲

双缓冲(double buffer)是在渲染中用到的基本技术,目的是为了提高绘图速度,防止屏幕的闪动,原理可以简述如下,生成两块内存,一块作为后缓冲(background buffer),一块为前缓冲(foreground buffer),前缓冲内存的是实际显示在屏幕上的内容,后缓冲可以称为工作缓冲,所有的图形都先画在这块缓冲中,完毕后再与前缓冲做一个交换(Flip),也就是”前“变”后“,”后“变"前”。循环以上操作。

doublebuffer-1

双缓冲从原理上并没有限制一定要用在渲染中,其本质就是把工作区域和显示区域分开,如果把工作区域作为和上层代码的接口,把显示区域作为和下层代码的接口,这样双缓冲就相当于是一个连接两个层次代码的中间件。这样它就有了很大的灵活性。

AI架构中可以借鉴这样的技术,用双缓冲来解决一些问题。比如,高层AI要发一个请求,然后下层的行为要处理这个请求,如何做一个结构来符合这个要求呢?这个的解决方案很多,可能还要牵涉到很多其他问题,我这里提供一个我实践过一个solution,就用到了双缓冲技术,可以给大家做个借鉴。

我先把“请求”抽象出来,并做成两个,一个作为backgroud的请求(简称BGR),一个作为foreground的请求(FGR),有点双缓冲的样子了吧。

对高层AI来说,它发的所有请求都是修改BGR中的内容,等高层AI的Tick结束后,我们就得到了一个完整的BGR(相当于渲染中,我们画完了所有的图形)。下一步就是交换BGR和FGR,即Flip,然后下层的行为系统就把FGR中的内容作为输入,继续后续的工作。

可以看到,双缓冲结构的优点就是接口相当的清晰,可以很方便的看到每一层的输入输出是否正确(BGR为AI的输出,FGR为行为系统的输入)。很多人也许会觉得,这样的做法,可以用copy的方式来代替,比如copy一份请求给下层,我同意,但我觉得,双缓冲的方式在这里显得更为清楚,而且效率上也更高(只是index的变动而已),另外,在实际代码中,Flip的并不一定是每帧进行的,原因在于我们可能为根据一些实际情况(称之为Request Rule)来做一些对BGR做一些合法性检测,只对通过合法性检测的BGR作Flip,这里就不多说了。

好啦,就写到这里,希望双缓冲技术也可以作为大家解决问题的一种可选方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值