叽里咕噜
1 为什么cpython获得gil锁,线程才能执行
在Cpython解释器中自带的垃圾回收机制不是线程安全的。
原因是,假若没有GIL锁的情况下,程序员在同一个进程下开了多个线程,这些多个线程在取得同样的一份代码之后,并不是自己执行这些代码,而是交给Cpython解释器去执行,由于多个线程都可以同时或者先后交代码给Cpython解释器,此时就会产生一个时间差。
但是同时,Cpython解释器自带的垃圾回收机制会随时的出来巡逻,若某个线程不幸的碰到了,该线程中的代码在执行时,会给某些值赋值,向操作系统申请新的空间,在恰恰刚要赋值的前段时间,垃圾回收机制会认为该值的引用计数为0,就会将这个值当成垃圾回收掉,此时就造成了数据的丢失。
这是由于多个线程与Cpython自带的垃圾回收机制线程同时运行产生的冲突。所以,我们就需要一把锁将垃圾回收线程与程序员搞出来的多个线程分隔开来,而GIL锁就是用来干这件事的。
2 python解释器:cpython:主流 pypy jpython
很多内置的,第三方的东西,都是基于cpython写的
-咱们用python的目的,是模块众多,都是基于cpython写的
3 有了gil锁为什么还要互斥锁?
GIL是限制同一个进程中只有一个线程进入Python解释器。。。。。
而互斥锁是由于在线程进行数据操作时保证数据操作的安全性(同一个进程中线程之间可以共用信息,如果同时对数据进行操作,则会出现公共数据错误)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现