python变量存储的是引用_Python内部是如何存储GC引用变量的计数的?

本文探讨了Python的全局解释器锁(GIL)与并发执行的关系。尽管GIL确保了单线程执行,但对变量加锁仍然是必要的,因为GIL并不保护用户空间的变量。Python通过字典存储变量引用,这种字典操作的线程不安全性可能影响性能。多线程操作共享字典需要同步,因此有时选择多进程能避免GIL的限制,但代码会变得更复杂。

这段时间一直在想一个问题,为什么Python有了GIL依然还要对变量加锁。Google的过程中查看一些东西,有了新的困惑。

一个说法说Python内部保存了一个用户空间和一个内核空间。用户空间通常就是我们自己编写程序的对象(变量)。而GIL控制的就是内核空间,内核空间保存了比如GC对于变量的计数,而内核空间是由GIL控制的。

引用知乎的一个回答请问下面说的这段话的意思中的维护的这个字典是不是就是上面所说的内核空间?难道是globals()查出的字典,应该不是,字典中好像找不到变量的引用?

因为, 有了GIL, 提供并发就变得很容易. 解释器只要计算每个线程的运行时间就好了,时间一到, 将这个线程冻结, 内存管理很简单.等等, 你还是没解释, 如果我已经给线程上了锁, 为什么还是要被GIL限制?一向符合人类直觉的Python, 有个很反直觉的机制.Py的变量a其实不是C系编译语言的变量.Python维护着一个字典, 储存着a和对应数值的指针.用某黑Python的大牛的话说, Python企图用字典装下世界..如果变成真多线程对于这个字典的维护将会很复杂.多个线程真正同时操作一个字典, Python引以为傲的字典性能, 估计就没那么强了.就是说, Python字典的性能强大,是建立在线程不安全的基础上.而字典在Python中的位置又是如此重要, 一个缓慢的字典, 会严重拖慢Python的解释速度.多线程操作多个独立字典. 那样还是要同步.那为什么不采用多进程呢? 这就社区主流的看法.虽然理论上线程成本更低, 但是那样代码就改成面目全非了..

ps: 对于上面这段引用,拜托大神解释一下,感觉作者不是说的那么直接!

我的困惑

Python内部是如何存储GC引用变量的计数的,是装到一个dict,而且这个dict是存放到kernel space而不是user space吗?

Python维护着一个字典, 储存着a和对应数值的指针.用某黑Python的大牛的话说, Python企图用字典装下世界。这句话怎么理解?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值