玥隐绵 玥隐绵
苦逼的学着编程^^^^
关注数: 51 粉丝数: 188 发帖数: 23,584 关注贴吧数: 48
【灌水】简单说下分房系统的问题模型 首先说,我不知道解决方案具体是啥,只做一个简单的问题模型。 先说,我懒得洗,只讨论前段时间南区都炸的情况。 357分房,炸锅的原因我也不太清楚,只是提出模型和大家讨论,希望大手子来指点我一下,找到炸锅原因。 首先,纯10,纯8,这种显然不知道问题长啥样的,线静一静。 目前已知 3 5 7 分房模型 下有,3:5:7 ;5:10; 15;3种分房情况。 等待队列崩溃,可能的原因有很多,但是首先一点,应该就是多线程分房队列被卡满,但是房间还未匹配完成。 熟悉服务器变成的大手子肯定比我了解,作为服务器,这种工作线程数,一般使用固定值,这关系到资源分配以及释放的问题,当然,如果是动态分配的,必然不会导致这种大面积等待队列卡死的问题,但是会出现资源不足的情况。当然也有可能毛子是写了动态分配的方案,然后导致2雷服务器资源不足,无法申请导致程序错误。。 先假设是固定工作线程数,每个工作线程会创造一个新的空房间,(这里我们假设有8个空房间,一开始是干净的)然后开始往里面塞人。创建过程应该是看等待队列里有啥,所以,当等待队列里人很多,而房间都是空的时候,会按照一定优先级,把能匹配进去的都塞进去。比如,10级优先最高,那么看等待队列是10级:100,9级:50个,8级100个,的时候,会先全塞大战场,塞进去60个,,第一个房间去玩大战场了。 然后第二个房间看,还有40个10级的,50个9级的,100个8级的,这样会继续塞,优先级具体方案,就看毛子脑洞了,一般是看具体数据,然后改进方案,比如哪个级别的队列平均等待时间比较多,就提高那个级别进入房间的优先级。 这段时间都是非常健康的时间,因为事实上,房间只是进入站场的入口,送走一批人,房间就开始新的匹配了,所以,在能开始游戏的情况下,房间都是非常健康的。 那么,问题出在哪。因为还有个因素,等待队列。也就是,10级:a台,9级:b台,8级:c台,7级:…… 当等待队列里车辆数量很多的情况下,房间是肯定能排进去的。然后在一个确定的时刻,等待队列里,车辆不够了,比如,某8级班长357分房时,6级车队列里不够14台,只有5台,但是已经被分配的车就会被塞过去,但是,游戏不会开始,房间会卡着,这个房间就被卡死了,会一直等到357排满。 这里就暂时补讨论对应车型,以及车型的分房权重问题,有些复杂,先简化模型。 另外一个重要的原因是,服务器不会知道未来来的车是啥,所以当等待队列全空的时候,新开一个房间,是357,还是纯8,还是纯10,是不确定的,这个优先级定为预设,一般不会做动态跟踪(原因是容易炸,很容易出bug)。 那么如果进来一台wz,这是开房间,看到wz,首先有分房保护,不会进10级,然后按照优先级,可能是5 10 的5 也可能是10,也可能是15,也可能是357的3和5.这里优先级全看毛子最近的这次优化,但是如果把wz分进房间,但是房间要求的人数迟迟不能满足,那就会卡死,而即使一个房间卡死了,其他房间的是不是会根据这个房间的等待信息而调整分房策略呢?很抱歉,一般情况是不会的,线程间通信会大大增加复杂度,特别是工作线程,牵扯到信号同步以及缓存一致。复杂度大增,效率大降,还可能造成死锁。。 大站场更新以后,对分房系统造成了毁灭性的打击,但是,按理说,大战场因为只存在顶级车,和分房系统,乃至357,影响都很小,这不应该是造成问题的原因啊。。。。 所以我一直都补认为,大战场是造成服务器崩溃的原因,我记得9.20日志上有说,毛子发现了357分房造成车辆收益下降,并且7级lt和9级lt影响了游戏体验,于是,他们对分房进行了优化。 我认为,这次的优化的数据来源并未考虑国服(毕竟不是他们运营的),新的分房策略可能加剧了357分房时,造成工作线程长时间等待,按国服的特例来说就是,国服的8级车多了,只要8级车卡在357的3中,就会长时间费掉一个线程,如果这个线程(房间)清空(获得足够的6级车)之前,新的8级车又进入了357的3,就会再费一个,这个分发模型类似I/O多路复用,当所有的分发线程(房间)被卡死后,服务器分房系统崩溃。 至于很多人说的,纯8,纯10能解决问题啊,分房系统不是很周到的照顾到了嘛巴拉巴拉。 这就是你并没有一上游戏就卡死的原因,在工作队列中有足够的车的时候,优先级会分出纯8纯10解决问题,但是你设想这样的画面,有个wz进了357的3了,他需要足够的6级小弟,但是队列里没有,然后玩家不断的点开始游戏,新的车进入等待队列,然后,都是8910,。分房系统中其他的房间正常工作,并且消化完了所有玩家,但是,wz依旧没获得足够的小弟开始游戏。(时长3秒~干完这些很快,也很有效率~)然后112进入队列,除了wz的房间都空着,678910,所有的队列也都空着,那么,这时112进了哪种房间呢?不知道,谁知道毛子的脑回路?可能是随机,可能有优先级,反正有那么一次,112也就了357的3,于是112和wz都需要6级小弟与7级小弟。。。如果这种情况多次发生,所有的房间卡死(不一定是8级的3,也可能是,8级在357的5,然后7级小弟不够,或者5级车进了个5 10 ,然后4级小弟不够)。服务器分房系统崩溃了。 为啥不分纯8纯10?分啦,不然你一上线就炸了呀,8级车多的溢出了好嘛。。那为啥还会卡死?你不知道未来发生的事情,服务器也不知道,所以,某个时刻,队列空,服务器不知道未来会来全是8级还是全是10级,所以有人卡在357中一直无法获得小弟。 以上是我认为的分房系统爆炸的原因,以及简单的算法模型。
【灌水】理智讨论357 贴吧社会人不少,懒得说有的没的。 理智讨论357,先说357的好处,不然有人喷我洗地。 1、9级车体感极佳。首先,9级车进入5-10(5),357(5),357(3)时,都能有较大作为,因为9级车的设定上本来就比8级车强度高非常多,8级以下的车一般都是不全面的,有各种各样**的弱点,而到了9级开始,一般都有比较均衡的发展。这个原因也有可能是9级mt标杆t54在游戏之初是作为顶级mt存在而产生的,9级相较于10级,一般主要在dpm和装甲上稍有逊色,但是操作,击穿能力,地形适应性,一般差距已经不大,整体能力都比较全能。 2、10级车感觉不错。357,嗯,吊打8级车,反正输赢什么的不用在意太多,5 10,差不多的感觉,10打9碾压不多,但依旧优势,比以前的收益肯定高(适用于普通玩家,高手反而会抱怨肉少了很多) 3、8级的wz体感极佳,原因,永远不当7,当然效果极佳,另外,wz的金币弹导致其在9级房依旧有足够的输出能力(虽然dpm哭瞎,但是我能打穿啊,你达不穿,dpm10000有啥用,-6哭晕在厕所)。 4、7级lt爽翻了,主要是金币lt的性能碾压,要知道,62的dpm比59高,比wz高,比-6高,并且,62的穿深曾今打到过250heat。现在也有220的穿深,在7级房,基本不存在不够用的情况? 然后,9级开始练车效率大幅提升,普通玩家的8级车练车效率小幅提升。 好了,说357带来的弊端,也是我不喜欢357的原因。(原先分房的好处) 首先,我不知道大家练车是咋练的,对于我这种全系都开,玩到10级就开新线的练车党来说,每条线基本都走过,现在低级房排不到人,基本都是4级车,或者5级车开练(最后一条线也6级了,再也没5级车给我打了)。原先练车用用环保3件套就行了,4级房有4级房的欢乐,5级房各种和屠幼狗勾心斗角(75%的成员,要阴掉涂油狗还是很难的)。6级房开始用特性碾压菜鸟,7级房指着金币弹去9级房搂两法,给9级大佬一个惊喜,另外,各种吊打59叔叔(对,我玩比较多的时候,59还很泛滥,wz还很贵,还有wz打银币弹) 1,357下的5-7级练车简直是地狱模式好吗?afk回来以后,发现也没多开几条线,于是打了几局,**,这比以前5级打涂油狗难多了。62是给9级房准备的强度好吗。同级lt性能碾压啊。砍过一刀以后,lt依旧非常强啊,不信你山猫进个6级房,看能不能把对面班长打的叫爸爸,山猫以前是打解放军叔叔的好吗。 2,一边倒太多了,是很爽快,爽快到慢车都基本打不到人就结束,或者还没开始打人,就被围观了,9级房还好点,至少能坚持到2分钟以后,慢车到1线再开始蹦,但是,,,,,,8级房以及以下,简直崩溃好吗。。3分钟就8:1这样的局不要太多。我不知道你们怎么觉得,反正我输出机会变少了。 ps:关于劣势的第2点,一个很简单的数学方法计算:以前总的肉量(8个9级,4个8级,3个7级)> (3个9级,还全是lt,td,5个8级,3个7级),以前吃肉的人,大约(6个9级,2个8级,1个7级)总有sb不会打 <(3个9级,4个8级,5个7级),肉比以前少, 吃肉的比以前多了,你收益可能会比以前高吗?除非,你是在以前没收益的那几个。 反正我不喜欢357,不过现在的分房我也不喜欢,原因很简单,这个分房不能做到车辆一一对应,对面8个10级,我们家6个,对面6个ht,我们家2个,然后是城市图。。以前吐槽分房,都是吐槽分房不平衡,或者那种28个10级,两个8级的极限拉壮丁7:5:3,从来没被吐槽过,所以我很不明白现在你们跳脚的点在哪里。 至于2雷说的优化分房,算了吧。从尼德堡明显可以看出,老算法一个字母都没动过,直接替换357的算法了。
首页 1 2 下一页