首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

开发游戏服务器过程中遇到多线程的烦人有关问题,希望大家指点

2012-03-04 
开发游戏服务器过程中遇到多线程的烦人问题,希望大家指点游戏服务器肯定由多线程组成。开发中遇到大量的多

开发游戏服务器过程中遇到多线程的烦人问题,希望大家指点
游戏服务器肯定由多线程组成。开发中遇到大量的多线程中访问同一资源的互斥问题,比如对同一个队伍的操作,交易......等等。
是否有合理的多线程架构,或者方式能够解决这个问题。

[解决办法]
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
[解决办法]
为了简化处理,游戏的逻辑用单线程处理,避免使用多线程

热点排行