关于传统AOI策略的一点改进口水
来源:互联网 发布:过期域名抢注平台 编辑:程序博客网 时间:2024/05/07 08:15
在传统意义上,AOI的策略大概会包含以下几两个构成要素(不是全部要素):
--构成AOI‘物理’空间基础的空间结构,具体来说可以常认为是地图管理,
关于地图管理方面的一些小策略,之前的口水文里有点东西可看;
--广播方式,更准确说,是消息的传达方式,具体来说就是一个广播消息,
如何确切到达它的目标对象;
而在下的一点口水,就重点在广播方式上。
先看看一个比较常用的具体方法:
bytearray b;
obj_list = get_from_map(x, y)
for obj in obj_list:
send_to(obj.ip, b) // socket send
各位看官应该很容易看出,for一下地socket send,大多数情况是造成IO开销峰值的元凶,
随着obj数量的递增,这段代码将会越来越灾难。
俺的想法是,把这个过程分离异步,首先,利用上面介绍的AOI包含的两个构成要素第一点:
area_list = get_area_from_map(x, y)
area_list可以认为是一个格子,或者是各位大侠手下更高级的地图管理方式实现下的一个地图单元,
那么,当一个obj要广播一个消息,可以这样处理:
bytearray b;
obj->boradcast_to_area(area_list, b)
for area in area_list:
area.set(obj.some_info(), b)
当中不做socket send,只是把要对某些地图单元广播的消息缓存在该单元内,如果没有需要接受消息的用于,
那么这个广播则可能永远不会有socket动作;
对于对这个消息感兴趣的用户,要获得这个消息:
bytearray b;
obj->interest_in_area(area_list)
for area in area_list:
push(area.all_broadcast_bytearray(), b)
send_to(obj, b)
那么,对于感兴趣的用户来说,一次接受广播的动作,就是收集它感兴趣的区域内缓存的(有效的)广播消息,
打包给自己。
缺点:
--内存开销可能不大友好,在下无法预计缓存广播消息对内存会产生多大压力(内存远没硬盘贱价;
--消息传达的实时性,不好说咧,如果用来玩FIFA大概没戏了;
--求各位看官补充喷;
好处:
--还是那个,降低传统AOI广播方法带来的消耗,大概。
- 关于传统AOI策略的一点改进口水
- 关于query_cache改进的一点想法
- QuickSearchBox的一点改进
- 关于buildDoc函数的一点改进,增强分页打印效果
- 关于使用Robotium进行Android测试的一点小改进
- 关于使用Robotium进行Android测试的一点小改进
- 关于Spring JDBC RowMapper的一点改进思路
- 【同步策略】位置同步策略和AOI
- 对SashForm的一点改进
- 接住你的口水
- 可恶的口水
- 蠕虫的口水
- 口水
- AOI的基本原理
- AOI服务器的实现
- AOI服务器的实现
- AOI 服务器的实现
- 游戏的AOI算法
- 自定义标签的步骤
- 网址
- 被叼了
- POJ 1328 Radar Installation
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- 关于传统AOI策略的一点改进口水
- 立波软件管家:方便管理安卓手机应用、应用搬家、快速摇摇卸载应用、应用备份(souapp.com搜应用网推荐)
- 二叉树的遍历
- Memcached进程自动重启脚本
- 单利模式
- 批量修改某个目录下的文件内容
- hdu 4451
- HowTo: Export C++ classes from a DLL
- win7 wif热点