用户态线程在AI中的应用
来源:互联网 发布:c语言基础编程题目 编辑:程序博客网 时间:2024/05/13 21:53
本文来自sniperhuangwei的专栏,此处纯粹收藏,转载请标明作者及原文出处,以示尊重!!
原文作者:sniperhuangwei
原文出处:http://blog.csdn.net/sniperhuangwei/archive/2010/03/28/5425471.aspx
最近这段时间在修改服务器AI,准备将AI分配到单独的服务器中做,但为了不至于对原有架构造成
太大的影响,攻击的判定,移动的判定仍然在gameserver上处理,AI服务器的角色就是根据状态
选择合适的决策并向gameserver发出决策命令。
例如:一个简单的AI函数可能像下面这样
调用attack的时候,将向gameserver发送一条攻击命令,由gameserver做出判定并将结果返回
给Ai服务器。这时就出现了一个问题,如果Ai循环又一次执行到onAi,但前一次的攻击结果还没有返回。
这个时候ai就不能根据正确的状态做出合理的决策了。
正确的做法是执行attack的时候阻塞在attack上,直到攻击结果返回attack才返回。
显然,如果阻塞在attack上,那么将导致其它AI无法继续运行,这个时候,用户态线程的威力就发挥出来
了。
执行attack的时候,可以把路径切换回调度器,由调度器选择没有被阻塞的用户态线程序来执行,当攻击
结果返回后,把被阻塞的用户态线程重新置为可运行状态,调度器以后可以重新调度该线程继续执行。
当调度器重新调度被阻塞的线程时,那个线程将会从attack中返回,继续后续的处理。这样保证了AI
的串行处理。
用户态线程的实现有很多种方式,包括linux的ucontext和windows下的fiber,下面给出一个fiber实现的
简单的用户态线程调度框架.
- 用户态线程在AI中的应用
- 用户态线程在AI中的应用
- 【AI】模糊逻辑在 AI 中的应用
- 数学在AI-CODE中的应用
- performSelector 在线程中的应用
- 蒙特卡罗算法在游戏(围棋)AI中的应用
- 蒙特卡罗算法在游戏(围棋)AI中的应用
- 蒙特卡罗算法在游戏(围棋)AI中的应用
- AI在蚂蚁金服产品线中的大规模应用
- 上海交通大学教授金耀辉:AI在智慧法院中的应用
- 用户故事在软件管理中的应用
- 聚类分析在用户分类中的应用
- 单链表在线程中的特殊应用
- 线程池在socket通信中的应用
- 互斥锁在线程同步中的应用
- 信号量在Java线程中的应用
- 委托在线程启动中的应用
- Looper、Handler在子线程中的应用
- 手机的使用与短信的利用度
- C#实现一个简单的HTTP服务器
- (转)Linux多线程编程
- C语言平面几何11-点关于直线的对称点
- SocketException.ErrorCode 的错误列表及注释,Winsocket Error 列表及注释
- 用户态线程在AI中的应用
- AI服务器的设计与实现
- Flex 的学习生涯
- php echo
- JavaScript的Document属性和方法
- 用串口调试助手软件调试
- hardware 中的几个地址问题之二
- JDBC连接池技术总结
- wince6.0+s3c6410摄像头驱动修改