赞
踩
1、python的GIL
GIL的全称是 Global Interpreter Lock,全局解释器锁。
在CPython (CPython是用C语言实现Python解释器,JPython是用Java实现Python解释器)中,在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行。在 I/O 操作时会释放这把锁。在计算操作(没有 I/O 操作),解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行。就因为GIL的存在,让python的多线程是假的多线程。
2、python中的内存管理
(1)Python内存由Python私有堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆,解释器负责处理此私有堆。
(2)Python对象的Python堆空间分配由Python内存管理器完成。核心API提供了一些程序员编写代码的工具。
(3)Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存并释放内存并使其可用于堆空间。
3、进程、线程、携程
进程是系统资源分配的最小单位。使用 threading 库
线程是程序执行的最小单位。使用 multiprocess 库
协程又称为微线程,是比线程更小的执行单位。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。使用 yield 关键字
线程切换从系统层面远不止保存和恢复CPU上下文这么简单。操作系统为了程序运行的高效性,每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作,所以线程的切换非常耗性能。但是协程的切换只是单纯地操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。
4、装饰器
装饰器本质上是一个嵌套函数(就是一个闭包),它接受被装饰的函数(func)作为参数,并返回一个包装过的函数。这样我们可以在不改变被装饰函数的代码的情况下给被装饰函数添加新的功能。
持续更新……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。