最近在做什么

最近在看两个东西——KlayGE和Terrarium,这个看的意思是看源代码。

KlayGE这个是一个LGPL的东西,源代码直接可以下载来看。Terrarium嘛,只好用Reflector来看了。其实之前就稍微看了一下了,今天只是再次深入了解。

首先说一下KlayGE吧,这个东西写得可以说比较好,虽然我没有用过,但是从代码上看应该比较优雅的。但是这里面只体现了一个UI上面的东西,没有与之对应的底层的东西。从3D这个角度上看,应该是比较先进的(相对而言),但是没有底层的其他东西,那么开发实际上还是和从头开始差别不是很大。或者说,仅仅减少了一个设计3D运行库的问题。实际上还有好多的东西这里面时没有涉及的,尤其是对于网络游戏来说。比如说网络部分就完全没有,在比如说对象模型,游戏主循环等等,统统都没有。换而言之,这个仅仅解决了怎么显示的问题,至于要显示什么,不显示的什么,还是得自己来做。而这个并不是我所希望的东西。大家可以想像一下,如果.NET Framework只给你提供了有关WebService和XML的东西,其他的Winform啊,Security啊,还有Thread等等通通都没有,那么你觉得用这样一个Framework来开发应用程序会感到开心吗?

再来看一下Terrarium,仔细研究之后才发现,这个东西在写的时候似乎就完全没有考虑过性能方面的问题,很多地方用了效率非常有问题的方法。例如生成大量的对象,或者一些其他的问题。不过从另外一个角度看,至少它能够运行,并且在如此影响性能的情况下,他还是可玩的,说明真正用来开发游戏可能也不是完全不可行的。

在看Terrarium的时候发现一个问题,他似乎是每一个生物用一个线程来运行里面的思考部分——至少是每一次都产生一个线程,这个我还没有仔细看,不知道到底是哪一种。不过无论哪一种,我都很奇怪为什么不用线程池呢?对于线程池,我也仅仅是了解,所以特地仔细翻了一下MSDN关于线程池的内容。最后总结出三点:
1、线程池具有一定的智能化。这个是MSDN上面宣称的,他说线程池自身会判断当前CPU使用率,如果过高了就不添加新的线程了。这个智能化我想还需要仔细看CLR的代码来验证,就算是真的,还要看这样的智能化是否本身有比较高的CPU消耗?
2、System.Threading.Timer本身就是利用了线程池的,所以关于Timer,还是用这个效率比较高。(Terrarium里面的部分Timer选用的是System.Timers.Timer,不是这个,感到奇怪当中。过一会儿看看System.Timers.Timer到底怎么样。)
3、线程池里面的RegisterWaitForSingleObject主要是用来同步的,这个东西还没有仔细看,需要看看是否有使用价值。

正在考虑计划队列是否使用线程池来运行……

还有一点是我最近没有搞明白的:Terrarium为什么在没有任何对象在系统里面的时候也保持了那么高的CPU占用率呢?我们能不能做得更好一点?

你可能感兴趣的:(最近在做什么)