Angenommen, es gibt zwei Threads, die durch asynchrones Senden von Datennachrichten aneinander kommunizieren. Jeder Thread hat eine Art Nachrichtenwarteschlange.
Meine Frage ist sehr niedrig: Was kann erwartet werden, um den Speicher am effizientesten zu verwalten? Ich kann mir mehrere Lösungen vorstellen:
- Der Absender erstellt das Objekt über
new
. Empfängeranrufedelete
. - Speicherpooling (um den Speicher zurück zum Absender zu übertragen)
- Müllabfuhr (zB Boehm GC)
- (Wenn die Objekte klein genug sind) Kopieren Sie nach Wert, um die Heap-Zuordnung vollständig zu vermeiden
1) ist die naheliegendste Lösung, daher werde ich sie für einen Prototyp verwenden. Die Chancen stehen gut, dass es schon gut genug ist. Unabhängig von meinem spezifischen Problem frage ich mich jedoch, welche Technik am vielversprechendsten ist, wenn Sie die Leistung optimieren.
Ich würde erwarten, dass Pooling theoretisch das Beste ist, insbesondere weil Sie zusätzliches Wissen über den Informationsfluss zwischen den Threads verwenden können. Ich befürchte jedoch, dass es auch am schwierigsten ist, das Richtige zu finden. Viel Tuning ... :-(
Die Speicherbereinigung sollte später (nach Lösung 1) recht einfach hinzuzufügen sein, und ich würde erwarten, dass sie sehr gut funktioniert. Ich denke also, dass es die praktischste Lösung ist, wenn sich 1) als zu ineffizient herausstellt.
Wenn die Objekte klein und einfach sind, ist das Kopieren nach Wert möglicherweise am schnellsten. Ich befürchte jedoch, dass dies die Implementierung der unterstützten Nachrichten unnötig einschränkt, daher möchte ich dies vermeiden.