Supponiamo che ci siano due thread, che comunicano inviando in modo asincrono messaggi di dati tra loro. Ogni thread ha un qualche tipo di coda di messaggi.
La mia domanda è di livello molto basso: quale può essere il modo più efficiente di gestire la memoria? Mi vengono in mente diverse soluzioni:
- Il mittente crea l'oggetto tramite
new
. Chiamate del ricevitoredelete
. - Pool di memoria (per trasferire nuovamente la memoria al mittente)
- Garbage collection (ad es. Boehm GC)
- (se gli oggetti sono abbastanza piccoli) copia per valore per evitare completamente l'allocazione dell'heap
1) è la soluzione più ovvia, quindi la userò per un prototipo. È probabile che sia già abbastanza buono. Ma indipendentemente dal mio problema specifico, mi chiedo quale sia la tecnica più promettente se stai ottimizzando le prestazioni.
Mi aspetterei che il pool sia teoricamente il migliore, soprattutto perché è possibile utilizzare ulteriori conoscenze sul flusso di informazioni tra i thread. Tuttavia, temo che sia anche il più difficile da ottenere. Un sacco di messa a punto ... :-(
La raccolta dei rifiuti dovrebbe essere abbastanza facile da aggiungere in seguito (dopo la soluzione 1) e mi aspetto che funzioni molto bene. Quindi, immagino che sia la soluzione più pratica se 1) risulta essere troppo inefficiente.
Se gli oggetti sono piccoli e semplici, la copia in base al valore potrebbe essere la più veloce. Tuttavia, temo che imponga inutili limitazioni all'implementazione dei messaggi supportati, quindi desidero evitarlo.