python字典get计数_Python内部是如何存储GC引用变量的计数的?
這段時(shí)間一直在想一個(gè)問題,為什么Python有了GIL依然還要對(duì)變量加鎖。Google的過程中查看一些東西,有了新的困惑。
一個(gè)說法說Python內(nèi)部保存了一個(gè)用戶空間和一個(gè)內(nèi)核空間。用戶空間通常就是我們自己編寫程序的對(duì)象(變量)。而GIL控制的就是內(nèi)核空間,內(nèi)核空間保存了比如GC對(duì)于變量的計(jì)數(shù),而內(nèi)核空間是由GIL控制的。
引用知乎的一個(gè)回答請(qǐng)問下面說的這段話的意思中的維護(hù)的這個(gè)字典是不是就是上面所說的內(nèi)核空間?難道是globals()查出的字典,應(yīng)該不是,字典中好像找不到變量的引用?
因?yàn)? 有了GIL, 提供并發(fā)就變得很容易. 解釋器只要計(jì)算每個(gè)線程的運(yùn)行時(shí)間就好了,時(shí)間一到, 將這個(gè)線程凍結(jié), 內(nèi)存管理很簡單.等等, 你還是沒解釋, 如果我已經(jīng)給線程上了鎖, 為什么還是要被GIL限制?一向符合人類直覺的Python, 有個(gè)很反直覺的機(jī)制.Py的變量a其實(shí)不是C系編譯語言的變量.Python維護(hù)著一個(gè)字典, 儲(chǔ)存著a和對(duì)應(yīng)數(shù)值的指針.用某黑Python的大牛的話說, Python企圖用字典裝下世界..如果變成真多線程對(duì)于這個(gè)字典的維護(hù)將會(huì)很復(fù)雜.多個(gè)線程真正同時(shí)操作一個(gè)字典, Python引以為傲的字典性能, 估計(jì)就沒那么強(qiáng)了.就是說, Python字典的性能強(qiáng)大,是建立在線程不安全的基礎(chǔ)上.而字典在Python中的位置又是如此重要, 一個(gè)緩慢的字典, 會(huì)嚴(yán)重拖慢Python的解釋速度.多線程操作多個(gè)獨(dú)立字典. 那樣還是要同步.那為什么不采用多進(jìn)程呢? 這就社區(qū)主流的看法.雖然理論上線程成本更低, 但是那樣代碼就改成面目全非了..
ps: 對(duì)于上面這段引用,拜托大神解釋一下,感覺作者不是說的那么直接!
我的困惑
Python內(nèi)部是如何存儲(chǔ)GC引用變量的計(jì)數(shù)的,是裝到一個(gè)dict,而且這個(gè)dict是存放到kernel space而不是user space嗎?
Python維護(hù)著一個(gè)字典, 儲(chǔ)存著a和對(duì)應(yīng)數(shù)值的指針.用某黑Python的大牛的話說, Python企圖用字典裝下世界。這句話怎么理解?
總結(jié)
以上是生活随笔為你收集整理的python字典get计数_Python内部是如何存储GC引用变量的计数的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可抓取数据包括什么_Pyth
- 下一篇: websocket python爬虫_p