Python计算性能差的几条原因

 我来答
在燕子岩讲印尼语的罗汉松
2018-11-05 · 超过25用户采纳过TA的回答
知道答主
回答量:54
采纳率:87%
帮助的人:12.7万
展开全部
首先,Python对于底层操作得抽象使得vectorization(向量化)计算性能提升方法,不能一步实现。在纯Python代码中,我们不能除以元素均为float类型数据得列表,只能每次除以其中得一个元素,这就是不能向量化。当然,这个问题可以通过使用类似Numpy这样得外部库添加向量化操作来解决。
其次,Python对于底层操作得抽象使得基于使用L1/L2层cache来存储数据用于下次运算的性能优化方法不能实现。因为python得garbage_collect机制,使得数据在内存中不得到最优排列,这产生了许多内存碎片,进而会引发以下这种情况,如果某次数据传递完全利用了bus得带宽,但因为内存碎片造成了一次原算所需数据得缺失,所以本次运算会被丢弃,还要至少再重发一次数据,这就造成了数据发送时间得延长,也会造成性能下降。
然后是Python的动态类型和不被编译。许多静态语言,比如C,首先会对代码进行编译,而在编译阶段,编译器会使用很多技巧来最优化所生成得中间代码以及变量存储在内存中得排列方式(比如结构体中得边界对齐).而纯Python代码虽然也进行编译,但不会像C语言编译那样进行存储优化,而且更糟糕得是,其动态特征使得对原生Python代码得优化难以进行,因为在运行过程中python代码不断变化。但现在有一些方法来减轻这种问题对于性能得影响,首先想到得是Cextension,这个第三方模块让Python可以被编译。
最后,是大家最熟悉得GIL(全局线程琐),这使得纯Python代码在使用多线程技术时,不能利用当前最流行得多核CPU,极大得影响了其计算性能。不过,这个问题可以通过使用multiprocessing模块来首先进行多进程操作,或使用Cextension等其他方法来克服这个问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式