在思考多核的时候,如果能从操作系统底层支持多核的话,相信无论是开发还是效率都将提升很多,这将是多核的出路,而从系统之上的应用层去使用多核,必将给多核效率打上折扣。这是毋庸置疑的。 同时看到一些人提到Python的多核,经过思考并搜索资料, gashero提到: 引用 为了利用多核处理器,看过很多文档,研究很多python相关技术,全部是失望的。 1、Python:受限于GIL,被锁住只能用一个CPU核心。 2、Twisted:其实只有一个线程,何谈多核的利用。 3、Stackless:测试表明其多线程程序的速度比Python使用的native线程方式要快一点,不过一样没法用多核。 4、parallel Python:多进程方式,感觉封装的很龌龊,虽然翻译完了文档,但是仍然没有兴趣去使用。 现在的办法: 1、负载均衡:后面在多台服务器上启动多个Python程序。现在我开发的应用基本上都是用twistd启动的daemon程序。 2、C/S应用:各个进程间用多进程通信。 3、subprocess:使用这个模块,利用外部进程作worker,异步等待结果。 从这些解决方法之后,倒是感觉Python作为胶水语言其实多核利用也不是很必要。 动态语言本身是应用层面的,层次还低于独立基于C/C++写多核,所以多核会严重受编译器或者解析器限制。从这点来看,Python要支持多核是比较困难的。 而在和CANCAN讨论的时候,我提到,现在很多人所解析的多核都不完全对。在于: 引用 1:现在的硬件已经到了多核,而硬件上面的软件基本没有支持多核,性能是基本得不到很好的提高的。 2:而多核强调的是任务,传统线程强调的是线程本身。 3:要使得现在的软件系统支持多核,必须对软件的流程任务化,才可以得到性能的提高。 4:作为机械行业,现在的大型工程软件,支持并行计算的都很少,而要使得他们支持并行计算,对项目进行重构是必须的,除非是操作系统支持多核。 |
|