day 30
GIL全局解释器锁:
基于Cpython来研究全局解释器锁.
1.GIL本质上是一个互斥锁.
2.GIL的为了阻止同一个进程内多个线程同时执行(并行)
- 单个进程下的多个线程无法实现并行,但能实现并发
3.这把锁主要是因为CPython的内存管理不是 "线程安全" 的.
- 内存管理
- 垃圾回收机制
GIL的存在就是为了保证线程安全的.
注意: 多个线程过来执行,一旦遇到IO操作,就会立马释放GIL解释器锁,交给下一个先进来的线程.
在计算密集型的情况下:
使用多进程
在IO密集型的情况下:
使用多线程
高效执行多个进程,内多个IO密集型的程序:
使用 多进程 + 多线程
递归锁(了解):
用于解决死锁问题.
RLock: 比喻成万能钥匙,可以提供给多个人去使用.
但是第一个使用的时候,会对该锁做一个引用计数.
只有引用计数为0, 才能真正释放让另一个人去使用
信号量(了解):
互斥锁: 比喻成一个家用马桶.
同一时间只能让一个人去使用
信号量: 比喻成公厕多个马桶.
同一时间可以让多个人去使用
线程Q(了解级别1): 线程队列 面试会问: FIFO
- FIFO队列: 先进先出
- LIFO队列: 后进先出
- 优先级队列: 根据参数内,数字的大小进行分级,数字值越小,优先级越高
1.首先根据第一个参数判断ascii表的数值大小
2.判断第个参数中的汉字顺序.
3.再判断第二参数中数字--> 字符串数字 ---> 中文
4.以此类推