GIL自定义互斥锁的区别

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不负责这件事,只能用户自定义加锁处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值