http://www.zhuzhonghua.com/essays/2012/07/19/zhenaishengming-shiyongpython/
今天在写测试程序时,用到了Python的多线程。
首先声明,在真实环境中不要使用Python的多线程,如果要用,那也得用C写的扩展。
碰到一个所有人都会遇到的问题,要结束,强制结束某一个线程。
网上也查了很多资料,一般都是要DIY设计,通过信号啊,变量啊,等等。
我宁愿用异常让整个程序退出,也不愿这么写。
当然Python的设计哲学是不建议强制结束线程的。
在查看Thread的所有方法时,发现了一个_Thread__stop()的方法,果然好用。
在此做个记录。
再次声明,这只是在测试时,为了简单,直接,才使用的方法。
如果在真实环境中使用,后果自负。
======分割线================== C++真的不适合网络游戏开发。
我们先建立几个共识,这样分析起来比较方便。
1,C++代码要比Python代码效率不止高一点两点,有人做过测试,大概是20倍左右。
2,看代码的时间要比写代码的时间多很多,而且大部分时间在改BUG。
3,最经常出现的,也是最痛苦的BUG,内存泄露,空指针,野指针,内存写坏。
4,团队里上面这些BUG也许只占5%,但是会占用95%的时间,而且有些BUG是在正式运营的时候才出现的,所以你知道这造成的影响。而且即使出现了这些BUG,一时半会也不一定能改掉。
5,Python写起来要比C++写起来快。
6,如果你用了线程,那么就和3一样了。
如果我做一个策划的需求,使用Python要比使用C++写的快,不止快一点。
而且你也知道,策划的需求变化是随时的,经常的,如果使用C++来应对这种变化,明显是慢的。
但是如果使用Python来做,就会很快了;而且策划也可以配合修改。
使用C++改BUG时,如果是碰到野指针,内存写坏,内存泄露,那你就祈祷吧。
使用Python就不会出现这个问题。
而且改其他的BUG,Python也更容易修改,当然也更快了。
使用C++很容易写出Hard-Test的代码,于是正确性就有问题了。
这方面可以参考PG的H&P。
当然C++的优势在效率,而且可以利用多核的优势。
在此奉劝使用多线程的C++使用者,能用多进程,就不要用多线程。
于是我可以使用多进程的方式来利用多核的优势。
效率上达不到要求,那我就多开几个进程,来保证业务及时完成。
这样确实硬件成本增加了,要多买几台机器来多运行几个进程。
可是这多出来的几个硬件成本,相对于研发的成本不知道省了多少。
包括待遇,时间,以及过长时间带来的其它非研发人员的成本, 以及使用C++导致的BUG带来的各种损失,包括不能及时改掉BUG带来的时间损失,以及程序出错带来的运营损失。等。
所以从总体上来看,这其实是节省了成本。
而且按照这种思路,以大局考虑,总体考虑,来分析下面的问题。
二八原理,当分析程序的效率时,只需要找出那20%的代码,来优化,就可以达到很好的效果。
而且按照上帝的说法,过早优化是万恶之源。
所以可以使用C++写扩展来改写那20%的代码,就可以达到优化的目的。
而且从总体上来看,这才是优化之道。
这样看来,使用Python代替C++的前提是你得有一个可以多进程代替多线程的服务器机制。
C++有自己的优势,而且使用C++的人,尤其是使用C++写服务器的人,天生对内存和效率敏感。
总结下来,C++适合写稳定的,不会随便改动的代码,比如网络层。而Python适合写经常变化的代码,比如策划的需求。