欢迎来到双子树教育网!
总站
切换分站
159-0741-2407
课程分类
双子树教育网 > 新闻资讯 > 计算机/IT资讯 > 大数据动态 >  python编程培训你要知道python的性能意味着什么?

python编程培训你要知道python的性能意味着什么?

发布时间:2020-10-07 17:19:16  来源:双子树教育网   浏览:   【】【】【

如果你的应用是基于单线程和单解释器的,讨论速度是没有意义的,因为去掉GIL不会影响代码性能。

如果您想在单个解释器(Python进程)中使用线程来实现并发,并且您的线程是IO密集型的(如网络IO或磁盘IO),您将看到GIL争用的结果。

如果您有一个web应用程序(比如Django)并且使用WSGI,那么您的web应用程序的每个请求都将是一个独立的Python解释器,所以每个请求只有一个锁。因为Python解释器启动慢,一些WSGI集成了可以保持Python进程的“守护进程”。

python编程培训

其他Python解释器的速度呢?

PyPy拥有GIL,通常比CPython至少快三倍。

Jython没有GIL,因为在Jython中Python线程由Java线程表示,这要归功于JVM内存管理系统。

JavaScript是怎么做到的?

首先,所有的Javascript引擎都使用标记和清除的垃圾收集系统,而前面提到的GIL的基本需求是CPython的存储管理算法。

JavaScript没有GIL,但是因为它是单线程的,所以也不需要GIL。

JavaScript通过事件循环和提交/回调模式实现异步编程的并发。Python有一个类似异步事件循环的过程。

“因为是解释性语言”

经常听到这句话。我认为这只是对CPython实际工作原理的简单解释。如果在终端输入pythonmyscript.py,CPython会开始对这段代码进行一系列的读取、词法分析、解析、编译、解释和运行。

这个过程中很重要的一步就是在编译阶段创建一个.pyc文件,这个字节码序列会被写到Python3下的__pycache__/路径中的一个文件中(对于Python2,文件路径是一样的)。此步骤不仅适用于脚本文件,还适用于所有导入的代码,包括第三方模块。

所以大多数时候(除非你写的代码只运行一次),Python是在解释字节码,并在本地执行。我们来对比一下Java和C#。NET:

Java编译成“中间语言”,然后Java虚拟机读取字节码,立即编译成机器码。。CIL的通用中间语言。NET也是一样,它的公共语言运行库(CLR)也是通过即时编译翻译成机器码的。

那么,如果Python使用和Java、C#一样的虚拟机和一些字节码,为什么在基准测试中会慢很多呢?首先,。NET和Java都是用JIT编译的。

JIT,也称为即时编译,需要一种中间语言来将代码分成块(或数据帧)。预编译器(AOT)的设计确保了CPU在交互之前能够理解每一行代码。

JIT本身并没有使执行更快,因为它仍然执行相同的字节码序列。但是,JIT允许在运行时进行优化。一个好的JIT优化器可以检测哪些部分执行的更频繁,这些部分被称为“热点”。然后,它会用更高效的代码替换它们来完成优化。

这意味着当一个计算机应用程序需要重复做一件事时,速度会更快。另外,我们需要知道Java和C#都是强类型语言(变量需要预定义),这样优化器就可以对代码做更多的假设。

本文来源:
责任编辑:双子树编辑团队
相关评论我来说两句
© 双子树教育网 湘ICP备19016366号-1