7

好的,所以我們正在開發一個網絡相關的應用程序,用戶可以上傳他們自己的Python腳本來決定一個算法。我們的代碼包含c和cython和python模塊。垃圾收集是否會讓python變得更慢?

由於避免等待時間,內存佔用量和最小的處理對我們來說是至關重要的,我們想知道,如果它是一個明智而有效的(性能明智)關閉垃圾回收和處理內存釋放自己。

+3

我們如何知道您擁有的程序員的素質?通過引入內存泄漏,您可以輕鬆地使其變得更糟。 – Blindy

+0

你究竟打算如何「關閉」內置於cython虛擬機中的垃圾回收? –

+0

假設優秀的程序員沒有引入內存泄漏,雙倍空閒。我只想知道手動釋放是否效率較低或更高。我正在閱讀pythons垃圾回收器使用的技術,例如不是每次都打電話免費,而是結合了一些東西。不確定這是否屬實。 – theRealWorld

回答

11

gc.disable只關閉循環垃圾回收器。無論如何,當refcount下降到零時仍然會收集對象。所以除非你有很多循環引用,否則沒有什麼區別。

你正在談論做一個定製的Python構建和禁用裁判計數GC?

+0

一般來說,參考GC的速度有多慢? – theRealWorld

18

只是讓語言做它想做的事,如果你發現你有一個實際的問題,後面來的,並張貼了。否則,它是過早的優化。

+0

這是非常非常真實的! –

5

只是開發應用程序,使其功能正確。一旦你有一個正確的應用程序啓動探查器,並確定慢位的位置。如果你擔心用戶腳本的性能,你可能會關注錯誤的東西。

更短的答案是,它可能是不明智的,無效的,試圖優化前的初始開發完成。

4

垃圾收集使得一切都變得更慢。這也使得一切都不那麼容易出錯。特別是如果要運行用戶上傳的腳本,我很難相信這種權衡會很好地發揮作用;如果您有任何泄漏或雙重釋放,您現在有一個DoS漏洞,如果有人可以找出如何觸發它。

1

CPython的(原來的和最常用的Python)使用垃圾收集一個引用計數的方法:它們不再被引用立即釋放的對象。因此,如果您不創建任何週期,那麼只存在於檢測週期的垃圾收集器不應該被調用太多。

2

我花了相當多的時間與自動垃圾收集語言的工作,我可以說幾乎是單方面信任本地垃圾收集會比定製的解決方案更快,更可靠。