Size: a a a

2021 June 08

M

MrFlorius in pro.elixir
О кидай
источник

AB

Alex Bubnov in pro.elixir
"и, кажется, небезынтересное видео, которое я пока не посмотрел - https://www.youtube.com/watch?v=pq-Pa2Fj4nE россберг про всякое, в том числе про эффекты, через которые предположительно будут continuations
и слайды чисто про continuations, там всё довольно понятно https://github.com/WebAssembly/meetings/blob/master/main/2020/presentations/2020-02-rossberg-continuations.pdf"
https://t.me/proelixir/168863
источник

M

MrFlorius in pro.elixir
Я посмотрел по диагонале, понял чуть больше чем нихуя, но чисто тик не нашел.

А если делать вызов функции на двух процессах?
1 - непосредственно нифка
2 - обработчик с колбеками.

Говорим 2 дернуть нифку на 1. 1 посылает сообщение 2 “ща дерну”, дергает, послыает 2 “дернул, получилось что-то там”
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну там плюс минус так и работает. Поэтому и утекает
источник
2021 June 09

M

MrFlorius in pro.elixir
Видимо я тупой. Не понимаю почему оно должно утекать
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Нельзя выйти из нифки посередине. 1 заблочится навсегда
источник

M

MrFlorius in pro.elixir
А там такая нифка что она не кончается никогда?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Нифка блочится в момент колбэка. Допустим из нифку можно послать сообщение внутрь 2 «дёрни такой колбэк». Но как получить ответ?
источник

M

MrFlorius in pro.elixir
Ааа понял, да
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Получить ответ можно, если первоначально запустить wasm в отдельном треде в нифке. Тогда можно будет из 2 вызвать другую функцию в нифке, которая сможет послать результат колбэка в этот тред.

Вот только если колбэк упадёт до вызова нифки - этот тред будет висеть до конца beam
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вообще говоря этот тред даже висящий можно подчищать в тот момент, когда диспоузится ресурс из нифки.

Но вот в этом месте я как раз и остановился
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А диспоузится он в момент GC. Например. Если умрет процесс 2, то тред тоже умрет
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Осталось только запилить
источник

M

MrFlorius in pro.elixir
Ну круто👍
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я в этот момент понял что надо чинить rustler и пошел коммитить туда
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А потом я просто забил и все
источник

B

Bogdan in pro.elixir
last_ids
   |> Task.async_stream(fn last_id ->
     from(b in B,
       where: b.id > ^last_id,
       limit: 3_500,
       order_by: [:id]
     )
   end)


Помогите query оптимизировть, чтобы без Task.async_stream запускать.

last_id хранится в таблице A. хочу получить данные ввида через одну query.


[
%A{
b_list: [
%B{
…some_data
}

]}]


Собственно тоже самое что и сейчас но только без Task.async_stream 🙂
источник

AD

Anastasiya Dyachenko in pro.elixir
здесь в любом случае n+1 запрос, т.к. для каждой записи a нужно делать отдельный запрос
источник

AD

Anastasiya Dyachenko in pro.elixir
вижу только вариант выбирать все записи из B и далее в коде распределять по записям A
источник

AD

Anastasiya Dyachenko in pro.elixir
либо решать вопрос выше, действительно ли нужен результат именно в таком виде и в таких количествах
источник