OTP - синхронный или асинхронный обмен сообщениями

Disclaimer: erlang newbie.

Одна из вещей, которая привлекла меня в erlang, в первую очередь, - это модель акторов; идея, что разные процессы выполняются одновременно и взаимодействуют посредством асинхронного обмена сообщениями.

Я только начинаю разбираться в OTP и, в частности, смотрю на gen_server. Во всех примерах, которые я видел - и предоставил, что они являются примерами учебного типа - для реализации поведения модуля используется handle_call () вместо handle_cast () .

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

Я собираюсь запустить новое приложение OTP. Это кажется фундаментальным архитектурным решением, поэтому я хочу быть уверенным, что понимаю, прежде чем приступить к делу.

Чтобы быть конкретным, мои вопросы:

  1. В реальной практике люди склонны использовать handle_call, а не handle_cast?
  2. Если так , каково влияние на масштабируемость, когда несколько клиентов могут вызывать один и тот же процесс / модуль?

Спасибо.

16
задан sfinnie 17 May 2011 в 13:58
поделиться