@csulyb 没有什么纯算法上的性能瓶颈,有数学计算的硬性需求的,大部分都通过各种库解决了,例如随机算法和检索近似对象,还有寻路,主要的性能瓶颈在硬性的计算量上,只能从整个 ai 算法的框架上做优化来规避,比如通过基本案例推导,让 npc 之间相互模仿行为,npc 每次要检索的行为树就降低了一大截,俺这个是纯文字沙盒游戏,重心就在 ai 上,我清楚这技术也是屠龙技,我搬砖多年,完全用不到,但是它酷啊,整个游戏行业,从各种 3a 到各路独立游戏,不管是什么模拟人生钢铁雄心绿帽之王,还是什么 cdda ,矮人要塞,环世界,哪个 ai 有我这个高级,你说是吧
@zglzy 项目大了,积重难返,其实也试过走 nuitka 之类的东西,把 python 转成 c ,再编译,但是有几个问题,一是现在项目和 python 耦合性太高了,不说那些复杂的语法糖,光是一个推导式,它都搞不定,更别提对各种 c 库的兼容,那些走 jit 的方案也是同理
exch4nge
2023-05-22 19:54:29 +08:00
不换语言的话,那就先上多线程吧
nekoharuya
2023-05-22 20:14:33 +08:00
@exch4nge python 的缺陷在这里,它的多线程是是在单进程中运行的,然后 cpu 在各个线程中不断切换,于是就有了一个问题,切换也是要时间的,在这种 cpu 密集的场景下,多线程将列表处理完一遍的时间,比单线程遍历完一遍,需要更多的时间,多进程的话,进程间通信的开销更加巨大,特别是在没有 fork 的 windows 上,要计算的数据还得单独传递过去,在数据体积十分庞大的情景(特指俺这游戏),这是相当高昂的开支,另外就是沙盒游戏的通病,角色数据只能逐个迭代,不能分开算……不过,目前游戏里还是有一些多线程处理,比如 ui 的渲染在单独的线程里,也有多进程的应用,比如用子进程实现了完全不影响玩家操作的自动存档,又或者做近似对象检索的库,它建立索引的过程是多核的