python多线程不是有GIL存在,保证一个进程下面多个线程执行是一个一个执行的吗?
GIL是解释器的锁 —保护都是解释器的数据,而不是自己的数据
保护不同的数据,应该加不同的锁
有GIL的存在能不能保证自己数据的安全
操作系统对进程线程调度机制已经非常完善了,我没有必要自己在搞一套调度机制,直接用的是操作系统的原生 线程
cpu会一直运行你这个程序吗(线程 py thread )?
答:
- 不会,要不时间过长,或者遇到阻塞了 操作系统会强制执行把cpu权限给拿走呀
- 可能线程2抢到了
假设:第九步正常执行玩了
第10步,释放GIL
第11步,在一次申请gil lock
上图 先抢的是GIL执行权限,拿到了执行权限在说能不能运行python代码
线程1在运行代码,到time.sleep(0.5)秒钟的过程当中,其它的线程即便抢到了GIL也没有办法执行,因为遇到了mutex.acquire()的阻塞
GIL保证一个进程多个线程同一个时间有一个执行,我这么做因为什么,我想保证python垃圾回收,线层是安全的
达成共识,锁的目的是伪了保护共享的数据,同一时间只能有一个线程来修改共享的数据,所有保护不同的数据就应该加不同的锁
GIL和Lock的是两把锁,保护的数据不一样,前者是解释器级别的(当然保护的就是解释器级别的数据,比如垃圾回收的数据),后者是保护用户自己开发的应用程序的数据,很明显GIL不负责这件事,只能用户自定义加锁处理