用户态线程在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实现的

简单的用户态线程调度框架.

  

原创粉丝点击