Когда следует использовать поведение OTP вместо спауна?

Я понимаю, как работает процесс. И я понимаю, как реализовать поведение OTP, такое как генеральный сервер и т. Д.

Но мне не ясно, когда я выберу один подход другому.

Например, Cesarini et. и др. в Erlang Programming реализовать сервер базы данных на стр. 240 путем создания процесса, написания функции цикла и т. д. Клиент чата Джо Армстронга на стр. 196 в Programming Erlang также порождает процесс.

Почему бы их лучше не реализовать как генеральные серверы OTP? Это в образовательных целях? Или есть веские технические причины?

Другими словами, какие практические правила помогут мне реализовать один подход вместо другого?

Большое спасибо.


person Lloyd R. Prentice    schedule 02.10.2013    source источник


Ответы (1)


В двух приведенных выше примерах простые порожденные процессы предпочтительны для образовательных целей: это проще объяснить, этим авторам не нужно объяснять OTP, чтобы передать то, чему они хотят научить, и в любом случае важно понять концепцию процесса в Erlang. Даже в реальном приложении, соответствующем правилам OTP, не все процессы реализованы с поведением OTP и вставлены в дерево наблюдения.

Практическое правило довольно простое. Определите, хотите ли вы следовать принципам проектирования OTP, проверив, что он приносит (изменения кода, отказоустойчивость и т. д.), или планируете ли вы интегрироваться с кодом, совместимым с OTP. Следуйте принципам OTP, если вы хотите использовать какие-либо функции, которые он предоставляет, и не изобретайте велосипед заново.

Если вы придерживаетесь принципов OTP и, следовательно, используете gen_* поведения, вам следует выполнить простое порождение для любого кратковременного процесса, который не требует наблюдения или обновления кода. Срок его службы не должен превышать время развертывания выпуска (в противном случае вам потребуется soft_purge так или иначе). Все остальные процессы должны быть вставлены в дерево надзора и, вероятно, реализовывать поведение gen_ *.

person Paul Guyot    schedule 02.10.2013