开发游戏服务器过程中遇到多线程的烦人问题,希望大家指点游戏服务器肯定由多线程组成。开发中遇到大量的多
开发游戏服务器过程中遇到多线程的烦人问题,希望大家指点
游戏服务器肯定由多线程组成。开发中遇到大量的多线程中访问同一资源的互斥问题,比如对同一个队伍的操作,交易......等等。
是否有合理的多线程架构,或者方式能够解决这个问题。
[解决办法]
http://www.onlinegamediy.com/index.php
需求不同,架构也会有所不同
写多线程程序时有一个原则,最好是共享的变量提供一整套的接口,然后外部只用接口访问
如果真要有些时候做不到这些(其实大多数这种情况都是由于结构计设不合理所至),出现死锁,就用上面网址中说的方法检测到,然后做出修改...
[解决办法]
[解决办法]这问题大了,涉及到架构。现在复杂些的游戏,一般都分布式的,把不同场景放在不同服务器中(或相同机子的不同进程)
逻辑还加锁,这完全是个非常差的架构。
逻辑流程用多线程,这样只能增加复杂度。
如果MMORPG只要求2000以在线,逻辑单线程完全可以解决。
试想下:
A玩家数据在线程1, B在玩家数据在线程了。
A随便一个交互就要互斥的取B数据,效率及复杂度不可接受。
如果你想复杂,好吧。多线程之间也可以用队列来传递消息(队列要加锁)-_-
[解决办法]一般的游戏逻辑都是单进程且单线程的。
你要做的是把网络接入层独立出来,把数据库及cathe独立成线程(进程)出来
[解决办法]回复10楼的。场景一般指什么呢,以mmorpg为例,场景如何划分。一个进程处理了所有的游戏逻辑我觉得挺不可思议得,那服务器得的多核都没有利用上了
场景如何划分:
场景是指地图,比如是把所有地图都用一个进程处理,还是一部分地图用A进程处理,另一部分用B进程处理?
分进程(多线程)处理场景有好处,因为大部分功能是和地图扯上关系的,比如PK,攻击怪物,只能在一个地图上(想做无缝的场景很难,这里不考虑)
但是如组队,公会这种全局信息是跨地图的。如果多进程处理场景如何处理(事实上这种游戏构架一般用一个全局的进程(服务器)来处理全局的信息)
这是有些复杂的。其实做什么样的功能,要看你们公司的实力以及策划的要求。如果1000+在线可以的话,用单进程场景就完全可以应付了。
服务器得的多核都没有利用上了首先,这是为了编程简单考虑,必然浪费效率。
其次,网络接收/发送层可以独立成一个进程,副本可以做成独立的进程(或者独立的服务器),数据库服务器也可以独立,聊天功能也可以独立,AI算法也可以,一些独立的计算也可以,很多哪,还是部分利用上了吧。
[解决办法]并且问下单进程中数据库如何处理?
介绍下数据库的异步处理方式。
并且问下单进程中数据库如何处理?
介绍下数据库的异步处理方式。
逻辑进程不管是单进程还是多进程,数据库肯定要独立的,至少独立成一个进程,更好的方式是独立成一个服务器,这样可以做到和逻辑服务器互不影响。
怎样异步处理,写起来很麻烦,给你推荐个网址吧:
http://bbs.gameres.com/showthread.asp?threadid=155628
[解决办法]为了简化处理,游戏的逻辑用单线程处理,避免使用多线程