Załóżmy, że istnieją dwa wątki, które komunikują się poprzez asynchroniczne wysyłanie do siebie komunikatów danych. Każdy wątek ma jakąś kolejkę komunikatów.
Moje pytanie jest bardzo niskie: czego można się spodziewać jako najbardziej efektywnego sposobu zarządzania pamięcią? Mogę wymyślić kilka rozwiązań:
- Nadawca tworzy obiekt przez
new
. Połączenia z odbiorcądelete
. - Pula pamięci (aby przenieść pamięć z powrotem do nadawcy)
- Wywóz śmieci (np. Boehm GC)
- (jeśli obiekty są wystarczająco małe) kopiuj według wartości, aby całkowicie uniknąć alokacji sterty
1) jest najbardziej oczywistym rozwiązaniem, więc użyję go jako prototypu. Są szanse, że jest już wystarczająco dobry. Ale niezależnie od mojego konkretnego problemu, zastanawiam się, która technika jest najbardziej obiecująca, jeśli optymalizujesz wydajność.
Spodziewałbym się, że pula teoretycznie jest najlepsza, zwłaszcza że możesz wykorzystać dodatkową wiedzę na temat przepływu informacji między wątkami. Obawiam się jednak, że najtrudniej jest też dobrze się postarać. Dużo tuningu ... :-(
Odśmiecanie powinno być dość łatwe do późniejszego dodania (po rozwiązaniu 1) i spodziewałbym się, że będzie działał bardzo dobrze. Sądzę więc, że jest to najbardziej praktyczne rozwiązanie, jeśli 1) okaże się zbyt nieefektywne.
Jeśli obiekty są małe i proste, kopiowanie według wartości może być najszybsze. Obawiam się jednak, że wymusza to niepotrzebne ograniczenia w implementacji obsługiwanych komunikatów, więc chcę tego uniknąć.