A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 1800|回复: 8

(转)技术流解释下为什么dice的bf4 bug不断。。。11。。。。。。。。。

[复制链接]

精华
0
帖子
299
威望
0 点
积分
-10 点
种子
0 点
注册时间
2015-7-14
最后登录
2015-10-29
 楼主| 发表于 2015-8-9 08:05  ·  天津 来自手机 | 显示全部楼层 |阅读模式

可能dice的官方说辞大家不好理解,我认为有必要形象的说明。
当程序越来越庞大即便是单线程的程序都会有众多功能性子程序,更别说在新创建的threads(线程)里调用这些子程序 ,还要完美的释放和关闭,这还不包括每一个thread 内必须清理或开辟的内存空间,任何一个遗漏都可能是毁灭性的。

编写大型应用程序就好比你在走一个迷宫,你开了无数扇门,最终走出了迷宫。程序是编写出来了,但是调试的呢?哈哈,这就好像又给了你一个新任务,让你返回迷宫把所有你曾经打开过但并不需要开启的门全部关闭你会怎样?要知道,运气好的话你走出迷宫可能不必要开启所有的门,不必要走完所有可能的路线,但是如果你想确认迷宫内每一个门是否被你打开过,你就必须一条路不漏的都走一遍。

当然,如果你做好大量记录,这些事看起来也没那么难。所以软件工程学里的构架和组织是一门绝对的科学。

早前DOS下的编程,即便有再多的子调用、再多的内存申请,也不容易出错,因为程序的运行逻辑只有一条,就好像你去图书馆借书,必须把旧书还了才能借新书,即便你再频繁的光顾图书馆管理员也不怕你弄丢大量的图书。上面说的迷宫理论其实更适用于DOS下,毕竟走出迷宫的路只有一条,而Windows编程?呵呵,完全就不是这么回事了。

虽然x86构架决定了在cpu内部也是通过中断的方式进行多任务轮询,原则上还是走完一步再进行下一步,这一点windows也好dos也好都必须遵循。但问题是windows的线程概念实在太烦了!这就好像把程序设计师的逻辑思维能力从2维度扩展到3维度,程序复杂性程级数级增加。现代计算机的运算都非常之快,你无法感觉到轮询的进行,看起来是在同时执行多个任务,正是因为非常快,如果多个线程都在读写同一个地址,这时会出现什么问题呢?我想大家都知道。

Windows 的多线程编程引入原子锁的概念同步和调度各线程的开启和访问,但是这个技术十分之复杂,稍有不慎就会带来deadlock(死锁),一般的多线程程序即便有多线程应用也会避免使用原子锁,那就是自我监测,等待某些线程执行完毕后再进行下一步动作。但问题是,如果想要最大化压榨cpu性能,就必须让所有线程都能够同时运行起来,而不是循规蹈矩的等待你还来了旧书再给你新书,这肯定没有效率吧。

比如说我们所熟悉的winrar 这样的软件。

winrar 2.0 以来就已经是一款多线程应用了。但多线程的应用可能仅限于开启一个线程来做进度条显示,一个线程来做压缩,也就是说每一个线程的功能是不冲突的。如果你有一个4核cpu,系统可能会分配一个核心来做压缩,一个核心来做显示进度条运算,先不说负载不能均衡,剩下的2个core呢?所以2.0的winrar 肯定无法发挥多核的优势。要最大化利用多核心的优势肯定是在压缩前检测系统的核心数量,然后为每一个核心都开辟一个线程来做压缩,所以4.0以后winrar 就这样做了,压缩吞吐量有了巨大的提高。但winrar 的多线程其实并不复杂,因为目标文件的总大小是可以被检测的,可以按照总大小除以核心数轻易的算出每一个核心所要压缩(吞吐)的字节数。即便在一个4核cpu上同时开启4个线程来压缩,也是可以做到互不干扰的,毕竟任务量大家都规定好了。如果每一个核心的工作频率不同,或者每一个的负载不一样,可能会出现某个核心已完成了其工作而某个核心尚未完成的情况,但这并没有问题,毕竟做完了自己的工作就停下没什么问题。所以这***本不必使用我上面提到的原子锁。

等等,我们不是在谈论最大化性能么?对的!基于这个立场winrar并没有发挥到我机器的最大性能,因为他无法区分哪个核心很忙,哪个核心做完了自己的工作从而开始帮助其它的核心完成总体任务。我不清楚5.0的rar 是否有这么做,但如果真要这么做复杂程度就会提高很多。即便rarlabs生产了这么多年的winrar也会遇到前所未有的BUG出现。因为假使一个已完成自己任务的核心想要去帮助其它核心,在他接手之前也必须搞清楚被帮助的核心目前的工作进度在哪里了,而且接手时还必须暂停被帮助核心的工作任务使其能够精确的移交部分任务出来,否则就算要帮忙也会无从下手,进度始终在变化中,这里就要考虑使用原子锁了。

一个winrar 要实现“最大化”性能压榨都如此复杂,更不要说游戏了,我想这就是DICE目前为什么总是bug不断的原因。因为他们太超前,太希望做好自己的技术流,而代价也是必须付出的。从目前来看,寒霜引擎确实是一个优化很不错的引擎,当然我不是指那些个令人抓狂的BUG,可观来说它的确比较好的发挥出了机器本来的性能,而不是让我们的高档硬件运行在极低的效率之下。至于BUG,我想正如我前面说的那样,修复的过程绝对是漫长的。
该用户已被禁言

精华
0
帖子
15285
威望
0 点
积分
15653 点
种子
5 点
注册时间
2006-7-3
最后登录
2020-7-2
发表于 2015-8-9 08:12  ·  广东 | 显示全部楼层
修完了臭虫,五也要出了。
该用户已被禁言

精华
0
帖子
3879
威望
0 点
积分
3881 点
种子
5 点
注册时间
2009-11-21
最后登录
2017-3-15
发表于 2015-8-9 09:38  ·  江苏 | 显示全部楼层
这是哪个半吊子写的,dos不支持多线程,不知道win98及之前都是dos内核吗,cpu用中断进行多任务?你以为这是单片机裸机程序吗

精华
0
帖子
32193
威望
0 点
积分
36287 点
种子
1294 点
注册时间
2009-7-12
最后登录
2023-11-23
发表于 2015-8-9 09:39  ·  拉脱维亚 | 显示全部楼层
4k帝又复活了!      
该用户已被禁言

精华
0
帖子
3527
威望
0 点
积分
4223 点
种子
1514 点
注册时间
2012-3-17
最后登录
2024-10-1
发表于 2015-8-9 09:40  ·  山西 来自手机 | 显示全部楼层
拘留所刚保释出来就安分点

精华
0
帖子
299
威望
0 点
积分
-10 点
种子
0 点
注册时间
2015-7-14
最后登录
2015-10-29
 楼主| 发表于 2015-8-9 10:01  ·  天津 来自手机 | 显示全部楼层
zkbskcwi 发表于 2015-8-9 09:39
4k帝又复活了!

z大!!!!!!!!

精华
0
帖子
4122
威望
0 点
积分
4982 点
种子
707 点
注册时间
2011-2-28
最后登录
2023-4-13
发表于 2015-8-9 10:50  ·  广东 | 显示全部楼层
哪个现代游戏不复杂。

bf4初期最大的bug来源是美术的骨骼绑定出的问题,和程序关系不大。

精华
0
帖子
299
威望
0 点
积分
-10 点
种子
0 点
注册时间
2015-7-14
最后登录
2015-10-29
 楼主| 发表于 2015-8-10 10:10  ·  天津 来自手机 | 显示全部楼层
恩,确实是初期bug太多

精华
0
帖子
299
威望
0 点
积分
-10 点
种子
0 点
注册时间
2015-7-14
最后登录
2015-10-29
 楼主| 发表于 2015-8-17 12:35  ·  天津 | 显示全部楼层
顶上去让更多人看到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-12-22 11:20 , Processed in 0.223219 second(s), 19 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部