GenServer также является просто рекурсивно вызываемой функцией, но он работает в своем собственном процессе и имеет некоторые дополнительные функции.
Вы хотите смоделировать долго выполняющиеся процессы как GenServer по нескольким причинам:
- Параллелизм - если он реализован как GenServer, он же отдельный процесс, система сможет выполнять другие действия параллельно
- Изоляция ошибок - если происходит сбой кода GPIO, вы не хотите влиять на остальную часть системы
- Контроль - наличие GenServer позволяет системе перезапускаться при сбоях. Это также дает вам возможность определять другие процессы, которые зависят от процесса GPIO, например, потребители данных.
Я рекомендую прочесть главу «Работа с несколькими процессами» из «Программирования эликсира» Дэйва Томаса, чтобы узнать больше о процессах и т. Д.