专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

为什么感觉python比javac_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/8 18:46:09       共计:3600 浏览

为什么感觉python比javac?

我们一般使用的 Python 是 CPython,导致它慢的原因主要有下面三条:

它是动态类型语言

它是解释型语言而非编译语言它有 GIL(Global Interpreter Lock全局解释器锁)

动态特性导致 Python中的变量没有类型声明,在执行过程中随时可能改变其类型,因此其很难被优化,而且还会有变量类型变动带来的内存释放及重新分配的性能损失。

Python 是一种解释型的语言,不像 C/C++ 等编译型语言会直接将代码编译诚机器吗执行,另外 Python 也没有像 Java 那样的即时编译工具(JIT)。

GIL 限制限制 Python 解释器在一个时刻只能有一个线程执行,线程的调度和切换也会损失一些性能。

要提高 Python 的执行性能,可以针对以上几条限制下功夫:

使用 Cython 为 Python 代码添加一些类型声明,并将其静态编译成可供 Python 调用的扩展模块。

使用 Numba 对 Python 代码做即时编译。打开 GIL。方式有很多,比如说一些库如 numpy 的很多操作都是打开了 GIL 的,我们在程序中调用这些库中的相应操作就能打开 GIL,另外也可以使用 Cython 的 with nogil 语句手动地打开 GIL。使用多进程以避开 GIL 的限制。比如说可以使用标准库中的 multiprocessing 模块,或者使用像 mpi4py 这样的包进行多进程的并行计算。

使用并行计算是加速 Python 的非常有效的方式。用 Python 做并行计算的途径有很多,比如说使用标准库中的 [threading 模块](https://docs.python.org/2/library/threading.html)进行线程级别的并行,[multiprocessing 模块](https://docs.python.org/2/library/multiprocessing.html)进行进程级别的并行,[concurrent.futures 模块](https://docs.python.org/3/library/concurrent.futures.html)实现异步并行,使用 [IPython.parallel 模块](https://ipython.org/ipython-doc/3/parallel/index.html)进行多种方式的并行,使用 [mpi4py 包](https://pypi.org/project/mpi4py/)进行 MPI 消息传递并行计算,等等。如果可以使用 C/C++,Fortran 或者使用 cython 为 Python 编写扩展模块,还可以使用 OpenMP 并行。对 GPU 编程则可以使用 [pyCUDA](https://documen.tician.de/pycuda/)。我的个人[简书专题](https://www.jianshu.com/c/5019bb7bada6)和 [CSDN 博客专栏](https://blog.csdn.net/column/details/26248.html)中有对用 Python 做并行计算的专门介绍并提供了大量的程序实例。有需要或者感兴趣的可以了解下。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:python都有哪些框架_java | ·下一条:程序员的任职资格要求有哪些_java

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有