Предположим, есть два потока, которые взаимодействуют посредством асинхронной отправки сообщений данных друг другу. У каждого потока есть какая-то очередь сообщений.
У меня очень низкий уровень вопроса: какой самый эффективный способ управления памятью? Я могу придумать несколько решений:
- Отправитель создает объект через
new
. Приемник звонковdelete
. - Пул памяти (для передачи памяти обратно отправителю)
- Сборка мусора (например, Boehm GC)
- (если объекты достаточно малы) копируйте по значению, чтобы полностью избежать выделения кучи
1) является наиболее очевидным решением, поэтому я буду использовать его для прототипа. Скорее всего, это уже достаточно хорошо. Но независимо от моей конкретной проблемы, мне интересно, какая техника наиболее перспективна, если вы оптимизируете производительность.
Я ожидаю, что объединение будет теоретически лучшим, особенно потому, что вы можете использовать дополнительные знания о потоке информации между потоками. Тем не менее, я боюсь, что это также сложнее всего получить права. Много тюнинга ... :-(
Сборка мусора должна быть довольно простой после добавления (после решения 1), и я ожидаю, что она будет работать очень хорошо. Итак, я думаю, что это наиболее практичное решение, если 1) окажется слишком неэффективным.
Если объекты маленькие и простые, копирование по значению может быть самым быстрым. Однако я опасаюсь, что это накладывает ненужные ограничения на реализацию поддерживаемых сообщений, поэтому я хочу этого избежать.