Verursacht die Garbage Collection Python langsamer?

7

OK, also entwickeln wir eine netzwerkbezogene Anwendung, in der der Benutzer seine eigenen Python-Skripts hochladen kann, um sich für einen Algorithmus zu entscheiden. Unser Code enthält C- und Cython- und Python-Module.

Da Latenzzeit, Speicherbedarf und minimale Verarbeitung für uns kritisch sind, haben wir uns gefragt, ob es sinnvoll und effektiv ist, die Speicherbereinigung zu deaktivieren und die Speicherzuordnung selbst zu verwalten.

    
theRealWorld 23.06.2011, 02:35
quelle

6 Antworten

11

gc.disable deaktiviert nur den zyklischen Garbage Collector. Objekte werden immer noch gesammelt, wenn der Refcount auf Null fällt. Wenn Sie also nicht viele zyklische Referenzen haben, macht das keinen Unterschied.

Sprechen Sie darüber, einen benutzerdefinierten Python-Build zu erstellen und den ref counting GC zu deaktivieren?

    
John La Rooy 23.06.2011, 03:27
quelle
18

Lassen Sie die Sprache einfach machen, was sie tun möchte, und wenn Sie feststellen, dass Sie ein tatsächliches Problem haben, kommen Sie zurück und schreiben Sie darüber. Sonst ist es eine vorzeitige Optimierung.

    
John Zwinck 23.06.2011 02:38
quelle
5

Entwickeln Sie die Anwendung einfach so, dass sie funktional korrekt ist. Sobald Sie eine korrekte Anwendung haben, starten Sie den Profiler und bestimmen Sie, wo die langsamen Bits sind. Wenn Sie sich Sorgen um die Leistung von Benutzer-Skripts machen, konzentrieren Sie sich wahrscheinlich auf das Falsche.

Eine kürzere Antwort ist, dass es wahrscheinlich unklug und unwirksam ist, zu versuchen, zu optimieren, bevor die erste Entwicklung abgeschlossen ist.

    
John Percival Hackworth 23.06.2011 02:42
quelle
4

Garbage Collection macht alles langsamer. Es macht auch alles viel weniger fehleranfällig. Vor allem, wenn es darum geht, vom Benutzer hochgeladene Skripts auszuführen, fällt es mir schwer zu glauben, dass der Kompromiss gut funktioniert. Wenn Sie Lecks oder doppelte Freigaben haben, haben Sie jetzt eine DoS-Sicherheitslücke, wenn jemand herausfinden kann, wie sie ausgelöst wird.

    
Luke Maurer 23.06.2011 02:43
quelle
2

Ich habe ziemlich viel Zeit in Sprachen mit automatischer Speicherbereinigung verbracht und kann fast einseitig sagen, dass das Vertrauen in die native Speicherbereinigung schneller und zuverlässiger ist als eine benutzerdefinierte Lösung.

    
cwallenpoole 23.06.2011 05:19
quelle
1

CPython (das ursprünglichste und am häufigsten verwendete Python) verwendet einen Refcounting-Ansatz für die Garbage Collection: Objekte, die nicht mehr referenziert werden, werden sofort freigegeben. Wenn Sie also keine Zyklen erstellen, sollte der Garbage Collector, der nur zum Erkennen von Zyklen existiert, nicht viel aufgerufen werden.

    
Dino Viehland 23.06.2011 03:25
quelle