Просматривая код приложения erlang, я столкнулся с интересной проблемой проектирования. Позвольте мне описать ситуацию, но я не могу опубликовать код из-за PIA, извините.
Код структурирован как OTP-приложение, в котором два модуля gen_server
отвечают за выделение каких-то ресурсов. Приложение работает отлично в течение некоторого времени, и у нас не было больших проблем.
Сложная часть начинается, когда одному из первых gen_server
нужно проверить, достаточно ли ресурсов осталось у второго. call
выдается второму gen_server, который сам вызывает служебную библиотеку, которая (в очень особом случае) выдает call
первому gen_server.
Я относительно новичок в erlang, но я думаю, что эта ситуация заставит два gen_server ждать друг друга.
Вероятно, это проблема дизайна, но я просто хотел узнать, есть ли какой-либо специальный механизм, встроенный в OTP, который может предотвратить такого рода «зависания».
Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ: Подводя итоги ответов: Если у вас есть ситуация, когда два gen_server
s call
друг друга циклическим образом, вам лучше потратить еще немного времени на дизайн приложения.
Спасибо за вашу помощь :)