#1 python的解释器有很多,cpython,jpython,pypy(python写的解释器)
#2 python的库多,库都是基于cpython写起来的,其他解释器没有那么多的库
#3 cpython中有一个全局大锁,每条线程要执行,必须获取到这个锁
#4 为什么会有这个锁呢?因为垃圾回收线程不是线程安全的,所有线程必须拿到这把锁,才能执行。
#5 python的多线程其实就是单线程
#6 某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行
7 GIL跟互斥锁的区别?GIL锁不能保证自己数据的安全,自己使用互斥锁保证自己的数据安全。
8 总结:cpython解释器中有一个全局锁(GIL),线程必须获取到GIL才能执行,我们开的多线程,不管有几个cpu,同一时刻,只有一个线程在执行(python的多线程,不能利用多核优势)
9 如果是io密集型操作:开多线程
10 如果是计算密集型:开多进程
以上两句话,只针对与cpython解释器
不同线程数据交互两种方式:
-共享变量:不同线程修改同一份数据要加锁(互斥锁)
-通过queue:不需要考虑数据安全问题(线程安全了)