Size: a a a

2021 June 05

X

XÆA-XII in pro.elixir
Я немного путаюсь в этом
источник

DG

Dmitry Grach in pro.elixir
Те же процессы.
Но use GenServer подмешивает определённый behavior к нему.
источник

DG

Dmitry Grach in pro.elixir
Все таки настоятельно рекомендую прочитать любую книжку по OTP
источник

X

XÆA-XII in pro.elixir
Посылать сообщения с помощью send/2 нельзя?
источник

LL

Lama Lover in pro.elixir
Ну, процесс это более низкоуровневое понятие, чем GenServer

Грубо говоря, GenServer это набор функций и некоторых коллбеков, который помогает лучше контроллировать процесс
источник

X

XÆA-XII in pro.elixir
Да я уже читаю, но появляется слишком много вопросов
источник

LL

Lama Lover in pro.elixir
Можно
В GenServer они обрабатываются через handle_info
источник

X

XÆA-XII in pro.elixir
Название путает немного
источник

LL

Lama Lover in pro.elixir
Если посмотреть в use GenServer, то там происходит две вещи
Во-первых, в тело модуля добавляется @behaviour GenServer что говорит компилятору, что этот модуль должен имплементировать коллбеки GenServer
Во-вторых, добавляются дефолтные имплементации основных коллбеков типа init/1 и child_spec/1
источник

LL

Lama Lover in pro.elixir
Потом, если вызвать GenServer.start_link(MyServer, ..., ...) (тут MyServer это тот модуль в котором use GenServer)
Запустится процесс, в нём вызовется MyServer.init, а потом, при получении сообщений будут вызываться различные коллбеки (которые handle_*)
источник

LL

Lama Lover in pro.elixir
Gen — это от Generic
Server — ну, видимо отсылка к Server из Client-Server паттерна
источник

X

XÆA-XII in pro.elixir
Не, название функции handle_info
источник

A ß in pro.elixir
она так в otp называется
источник

X

XÆA-XII in pro.elixir
Почитал исходники плеромы, +/- понял, как с этими генсерверами работать
источник

LL

Lama Lover in pro.elixir
А, ну это да

Вообще тут так работает
handle_call обрабатывает сообщения которые {:"$gen_call", from, msg} (они посылаются функцией как GenServer.call). Это для синхронного взаимодействия, чтобы было запрос-ответ.
handle_cast обрабатывает сообщения {:"$gen_cast", msg} , которые посылаются через GenServer.cast
Ещё есть сообщения вида {:"$sys", ..., ..., ...}, которые GenServer обрабатывает сам, не вызывая коллебков. Это специальные сообщения для упрощения контроля процессов

А все остальные обрабатываются в handle_info
источник

B

Bogdan in pro.elixir
в Elixir in Action 2 там с нуля пишется генсервер и все становится сразу понятно)
источник

X

XÆA-XII in pro.elixir
Первую читаю
источник

B

Bogdan in pro.elixir
я первую не читал, вроде все вторую хвалят.
источник

X

XÆA-XII in pro.elixir
Получается, генсервера - это основные процессы в эликсире, которые спавнят и управляют обычными низкоуровенными процессами?
источник

X

XÆA-XII in pro.elixir
типа, начальник - работники
источник