(к примеру если нужно rpc или сетевые вызовы делать внутри instance)
Узкое место - event loop верно ? Как это можно обойти ?
вынести всю работу в отдельные системные треды, а тред event loop оставить только для транспорта
вот в эту сторону и смотрю А есть примеры ? :)
https://github.com/tarantool/kafka вот пример, как можно вынести работу со сторонней синхронной либой, чтобы она event loop не кончила
Еще такой момент - если сам модуль написан на rust (не LUA) можно ли: 1. Средставми OS создать отдельный поток для обработки 2. Взаимодействовать с этим потоком из любого обработчика ? Без написания биндингов к C api тарантула
Пишите либу, экспортируете ее api через ffi Далее из луа дергаете init своей либы, который создает все необходимые потоки / сущности В рамках event loop из lua периодически дергаете апи своей либы что бы отправить запросы / получить ответы
Есть какая-то защита или это пройдёт? 1. Пишем модуль который делает какой-то сетевой вызов 2. Далее внутри транзакции делаем вызов этого модуля. То есть по сути получается сетевой вызов внутри транзакции. Пройдёт такое ?
либо весь евентлуп будет ждать завершения сетевого вызова, либо разбивать взаимодействие между несколькими вызовами из евнтлупа, а значит никакой транзакционности
Да я об этом и говорю. То есть по сути если мы делаем какую-то доп функциональность через отдельный модуль, то появляется возможность делать сетевой вызов внутри транзакции (без использования mvcc) и блокировки евент пула ?
нет, либо блокировка евентлупа на все время вызова в транзакции,либо без блокировки, но вне транзакции
Ну то есть мы делаем сетевой вызов и блокируем евент пул ?
да. вне зависимости от модульности
Обсуждают сегодня