Многоадресная рассылка в Erlang является одноадресной для каждого получателя. Нет другого способа передать информацию, кроме этого. Поскольку у вас есть только небольшое количество процессов, я не думаю, что у вас вообще возникнут проблемы с копированием. По крайней мере, я бы не слишком беспокоился об этом, пока он не станет узким местом системы.
Не стоит недооценивать сохранение процесса, который работает как мультикастер для группы. Это может быть простое решение, хотя просто хранить pid() в таблице ETS или использовать для него gproc
может быть примерно то же самое.
Беспокойство о чрезмерном копировании, вероятно, не будет плодотворным в начале. Хитрость здесь может заключаться в том, чтобы сохранить сообщение в виде большого двоичного файла, а затем отправить его. Тогда, как пишет Марсело, вам останется только обойти референс.
Я бы избегал решения Вэнса Шипли о связывании. Ссылки являются двунаправленными, и вам придется перехватывать выходы, чтобы получить выходное сообщение. Вероятно, лучше поддерживать жизненные знания с помощью вызова erlang:monitor(process, Pid)
. Вам нужно будет сделать это, так как процесс, который уходит, должен быть удален из группы. Получение сообщения вида {'DOWN', ..., ...}
будет признаком того, что вам нужно позаботиться об очистке.
person
I GIVE CRAP ANSWERS
schedule
18.10.2012