Отказ от ответственности: новичок erlang.
Одна из вещей, которая привлекла меня к erlang, в первую очередь, - модель Актера; идея о том, что разные процессы запускаются одновременно и взаимодействуют посредством асинхронной передачи сообщений.
Я только начинаю вставлять свои зубы в OTP и, в частности, смотреть на gen_server. Все примеры, которые я видел, и предоставили им примеры типов учебников, используйте handle_call()
вместо handle_cast()
для реализации поведения модуля.
Я нахожу это немного запутанным. Насколько я могу судить, handle_call - это синхронная операция: вызывающий объект блокируется до тех пор, пока собеседник не завершит и не вернется. Что, похоже, противоречит философии передачи асинхронных сообщений.
Я собираюсь запустить новое приложение OTP. Это похоже на фундаментальное архитектурное решение, поэтому я хочу быть уверенным, что понимаю, прежде чем приступать.
Чтобы быть конкретным, мои вопросы:
- В реальной практике люди обычно используют handle_call, а не handle_cast?
- Если да, то что влияет масштабируемость, когда несколько клиентов могут вызывать один и тот же процесс/модуль?
Спасибо.