Нет встроенных механизмов для ограничения размера очереди сообщений для процесса.
Обычным решением этой проблемы в эрланге является введение протокола управления потоком между производителем и потребителем. Это может быть так же просто, как отправитель, ожидающий ответа continue
перед отправкой следующего сообщения. Вы можете изобрести более сложные протоколы управления потоками (оконные, ...), но часто подойдут send / wait-reply. Протокол gen_server:call/2
является хорошим протоколом запроса-ответа и его можно использовать повторно, посмотрев на код для gen_server
и gen:call
- он позаботится о многих возможных случаях.
Другой подход состоит в том, чтобы передавать сообщения через систему, а не отправлять их - в этом случае получатель запрашивает у отправителя сообщение, когда оно готово. Хотя если у вас есть внешние производители, которым вы не можете ограничить скорость или достаточно буферизировать, у вас может не быть этой опции.