Size: a a a

2020 August 29

T

Tharin in pro.elixir
Чтоб они там кружили и память забивали?
источник

T

Tharin in pro.elixir
Не, ну можно
источник

T

Tharin in pro.elixir
Обычно такое в играх делают
источник

B

Bogdan in pro.elixir
Tharin
То есть вывести пользователей в генсервера ?
Ну получается динамический супервизор, дети берут стейт из бд при инициализации и только инсертят в бд
источник

T

Tharin in pro.elixir
Ну я так и понял
источник

T

Tharin in pro.elixir
А для поиска, кажется, ещё их стоит в реджистри положить
источник

B

Bogdan in pro.elixir
Ну да соответственно
источник

B

Bogdan in pro.elixir
Который в отдельной ветке в дереве
источник

T

Tharin in pro.elixir
Ну так обычно делают в играх, где есть логин-логаут
источник

T

Tharin in pro.elixir
Чтобы вычищать логоффнутых из памяти
источник

B

Bogdan in pro.elixir
Да наверное
источник

T

Tharin in pro.elixir
Или по таймауту
источник

SK

Suren Kirakosyan in pro.elixir
Źmićer Rubinštejn
Если я правильно понял, тут не нужен генсервер
ну смотри, я читаю книгу Benjamin The Little Elixir OTP Guidebook и там он объясняет работу процессов. Объясняя работу процессов он создают лист с именами 5 городов и ассинхронно запрашивает температуру в этих городах с использованием процессов. Потом переходит к объяснению GenServer-а, но не выполняет ассинхронный запрос температуры городов. Я решил сам поиграться с этим, так как в книге нету примера с использованием GenServer-а. В итоге я мог как для каждого города запустить свой GenServer.start_link, так и запустить один GenServer.start_link для всех городов. Результат был одинаков и поэтому я не понял как правильно делать в этом случа: для каждого свой генсервер или один генсервер для всех?
источник

T

Tharin in pro.elixir
Suren Kirakosyan
ну смотри, я читаю книгу Benjamin The Little Elixir OTP Guidebook и там он объясняет работу процессов. Объясняя работу процессов он создают лист с именами 5 городов и ассинхронно запрашивает температуру в этих городах с использованием процессов. Потом переходит к объяснению GenServer-а, но не выполняет ассинхронный запрос температуры городов. Я решил сам поиграться с этим, так как в книге нету примера с использованием GenServer-а. В итоге я мог как для каждого города запустить свой GenServer.start_link, так и запустить один GenServer.start_link для всех городов. Результат был одинаков и поэтому я не понял как правильно делать в этом случа: для каждого свой генсервер или один генсервер для всех?
В зависимости от того, что ты хочешь. Если ты положишь всех в один генсервер, то Стейт генсервера будет - список городов.
источник

T

Tharin in pro.elixir
Если ты хочешь, чтобы каждый город был атомарным стейтом, который ещё что-то может делать в домене, - то по разным генсерверам
источник

T

Tharin in pro.elixir
Если ты отправишь одному генсерверу 5 сообщений на получение 5ти городов из его стейта, он сделает это последовательно за 5 действий, обработав 5 сообщений
источник

T

Tharin in pro.elixir
Если ты для каждого города по генсерверу заведешь, то они свои сообщения будут обрабатывать независимо друг от друга. Параллельно.
источник

SK

Suren Kirakosyan in pro.elixir
+ код который работал одинаково

cities = List.duplicate "London", 100

cities
|> Enum.map(
                       fn city -> {:ok, pid} =   Metex.Worker.start_link

                       Metex.Worker.get_temperature(pid, city)
    end)

И следующий пример

{:ok, pid} = Metex.Worker.start_link

cities
|> Enum.map(fn city -> Metex.Worker.get_temperature(pid, city) end)
источник

SK

Suren Kirakosyan in pro.elixir
Tharin
Тогда советую книгу Sasa Juric - Elixir in Action
в очереди.
источник

B

Bogdan in pro.elixir
Ещё можно через Task.async_stream
источник