python字典get计数_Python内部是如何存储GC引用变量的计数的?
這段時間一直在想一個問題,為什么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企圖用字典裝下世界。這句話怎么理解?
總結
以上是生活随笔為你收集整理的python字典get计数_Python内部是如何存储GC引用变量的计数的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可抓取数据包括什么_Pyth
- 下一篇: usb打印机命令_打印机脱机怎么办 打印