Как создать очередь сообщений с привязкой к памяти в Erlang?

Я хочу скорость асинхронных сообщений, но все еще имею некоторый контроль потока. Как я могу сделать это в Эрланге?

2 ответов


сейчас нет ограничения памяти процесса - это обсуждается в списке рассылки и т. д. Вы можете посмотреть на эти нити.

с другой стороны, когда вы используете реализацию шаблонов OTP, такую как gen_server, у вас есть большая свобода в получении сообщений из очереди процессов и измерении длины очереди.

gen_server2 используется в rabbitmq для оптимизации этого путем перемещения сообщений во внутреннюю структуру данных. Имея это, вы можете отбросить любое новое входящее сообщение, когда внутренняя очередь слишком длинная. Вы можете сделать это молча или уведомить отправителя, что сообщение отклонено.

все, что находится на очень низком уровне.

RabbitMQ предоставит эту функциональность на уровне AMQP.


общим и довольно хорошим способом обеспечения контроля потока является создание хорошо выбранных сообщений в вызовы, которые ограничивают, сколько нагрузки каждый клиент может загрузить сервер на один, эффективно обеспечивая принудительную обратную связь чрезвычайно простым способом. Трюк, конечно, выбрать, какие коммуникации использует синхронные вызовы : -)