Задача, подобная GPIO для чтения навсегда, должна быть рекурсивной функцией или GenServer? - PullRequest
0 голосов
/ 09 января 2019

Я постоянно отслеживаю значение для обнаружения. Мне интересно, будет ли это работать надежно, если это рекурсивная функция? Или я должен создать Genserver и постоянно вызывать его, чтобы он мог обрабатывать сбои? Каковы лучшие случаи использования Genservers, а какие нет.

1 Ответ

0 голосов
/ 09 января 2019

GenServer также является просто рекурсивно вызываемой функцией, но он работает в своем собственном процессе и имеет некоторые дополнительные функции.

Вы хотите смоделировать долго выполняющиеся процессы как GenServer по нескольким причинам:

  • Параллелизм - если он реализован как GenServer, он же отдельный процесс, система сможет выполнять другие действия параллельно
  • Изоляция ошибок - если происходит сбой кода GPIO, вы не хотите влиять на остальную часть системы
  • Контроль - наличие GenServer позволяет системе перезапускаться при сбоях. Это также дает вам возможность определять другие процессы, которые зависят от процесса GPIO, например, потребители данных.

Я рекомендую прочесть главу «Работа с несколькими процессами» из «Программирования эликсира» Дэйва Томаса, чтобы узнать больше о процессах и т. Д.

...