GIL: Global Interpreter Lock 全局解释器锁
多任务执行占CPU
多任务占用CPU的资源消耗:进程>线程>协程
在cpython解释器中只有进程是真的多任务,线程和协程都是假的多任务
什么是全局解释器锁
在cpython解释器中,用多线程做多任务的事情,在全局有一个互斥锁在同一时刻只能允许一个线程在执行任务,其他线程排队等待获取锁,
如何解决GIL在cpython解释器中带来的问题
1.根据程序的类型
计算密集型:进程,算法
IO密集型(input output):线程、协程
2.换解释器
eg:
jpython
3.换语言
因为python是一种解释性的语言,他可以兼容好多语言和平台
eg:
c语言,C++,C#,java
深浅拷贝:
深拷贝:拷贝一个内容,会拷贝所有信息. deepcopy()
浅拷贝:拷贝一个内容,只拷贝引用(引用地址中的数据). copy()
list:
深拷贝:
deepcopy() 拷贝所有数据
浅拷贝:
copy() 只拷贝引用地址,并没有拷贝内容
import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = copy.copy(c)
e = copy.deepcopy(c)
print(id(c[0]))
print(id(d[0]))
print(id(e[0]))
tuple:
普通元祖
深拷贝:deepcopy
浅拷贝:copy()
deepcopy()和copy()都只拷贝引用地址中的数据
元祖中是可变类型时:
深拷贝:
deepcopy() 拷贝所有数据
浅拷贝:
copy() 只拷贝引用地址中的数据
tuple()
a = (11, 22)
b = (33, 44)
c = (a, b)
d = copy.copy(c)
e = copy.deepcopy(c)
print(id(c))
print(id(d))
print(id(e))
+++++++++++
a = [11, 22]
b = [33, 44]
c = (a, b)
d = copy.copy(c)
e = copy.deepcopy(c)
a.append(55)
print(id(c[0]))
print(id(d[0]))
print(id(e[0]))
print(c)
print(d)
print(e)
其他数据类型基本都是浅拷贝如: int float str