Supponiamo che ci siano due thread, che comunicano tra loro in modo asincrono inviando messaggi di dati. Ogni thread ha qualche tipo di coda di messaggi.
La mia domanda è molto bassa: cosa ci si può aspettare che sia il modo più efficiente per gestire la memoria? Posso pensare a diverse soluzioni:
- Mittente crea l'oggetto tramite
new
. Il destinatario chiamadelete
. - Raccolta di memoria (per trasferire nuovamente la memoria al mittente)
- Raccolta dei rifiuti (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 tecnica sia più promettente se si sta ottimizzando le prestazioni.
Mi aspetto che il pooling sia teoricamente il migliore, soprattutto perché è possibile utilizzare conoscenze extra sul flusso di informazioni tra i thread. Tuttavia, temo che sia anche il più difficile da ottenere. Un sacco di tuning ...: - (
La raccolta dei rifiuti dovrebbe essere abbastanza semplice da aggiungere in seguito (dopo la soluzione 1), e mi aspetto che funzioni molto bene. Quindi, suppongo che sia la soluzione più pratica se 1) risulta troppo inefficiente.
Se gli oggetti sono piccoli e semplici, la copia per valore potrebbe essere la più veloce. Tuttavia, temo che imponga limitazioni inutili all'implementazione dei messaggi supportati, quindi voglio evitarlo.