Size: a a a

Scala User Group

2020 December 22

Oℕ

Oleg ℕizhnik in Scala User Group
Акка не умеет отличать акторы, которые содержат блокирующий код от остальных.
По умолчанию есть один диспатчер, но вы можете добавить сколько-угодно в конфиге и назначить каждому свой
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Поэтому по умолчанию действительно есть два пула - один для всех акторов, и один маленький для scheduled для таймеров
источник

БЁ

Борщевик Ёбаный... in Scala User Group
то есть теоретически, несмотря на два пула, я могу поставить акку раком, накидав блокирующего кода?
источник

NV

Nikita Vilunov in Scala User Group
Materializer депрекейтед
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita Vilunov
Materializer депрекейтед
эх
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita Vilunov
Materializer депрекейтед
Забыл уже
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Удалил
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Борщевик Ёбаный
то есть теоретически, несмотря на два пула, я могу поставить акку раком, накидав блокирующего кода?
Так же легко как зио или котоэффекты внезапным блокирующим кодом поставить раком вряд ли выйдет.
Акка стремится переиспользовать тред для одного актора, так что небольшое количество блокирующих акторов просто займут свои треды
источник

Oℕ

Oleg ℕizhnik in Scala User Group
В среднем их лучше выделять в свои диспатчеры, но не обязательно
источник

R

RAFIZ in Scala User Group
Simon
Если посмотреть в run (или runWith) - там имплиситный материалайзер, который нынче (не помню с какой версии, но недавно) можно получить имплиситно же из ActorSystem.
у меня версия акки видимо, как раз стара. отдельно материалайзер приходится создавать. спасибо
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
для фьючи самой по себе никакой экзекьюшен контекст или поток не нужен
а почему не нужно?футуры же все используют какие-либо контексты неявные

или там под капотом что-то в стиле Future.successful(result) происходит? сорри за глупый вопрос заранее. хочется понять что там от чего зависит
источник

БЁ

Борщевик Ёбаный... in Scala User Group
Oleg ℕizhnik
Так же легко как зио или котоэффекты внезапным блокирующим кодом поставить раком вряд ли выйдет.
Акка стремится переиспользовать тред для одного актора, так что небольшое количество блокирующих акторов просто займут свои треды
в том же зио, например, есть настройка рантайма как YieldOpsCount. Но не нашёл возможности указать методу вес или что-то в этом духе
К примеру, в ерланге поход из виртуальной машины в блокирующий энв стоит 1/10 или 1/20 от YieldOpsLimit, что позволяет немного проталкиваться с блокирующими операциями
не нашёл настройку таких весов для функций в зио, да и есть ли смысл так упарываться?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
а почему не нужно?футуры же все используют какие-либо контексты неявные

или там под капотом что-то в стиле Future.successful(result) происходит? сорри за глупый вопрос заранее. хочется понять что там от чего зависит
сама по себе фьюча не обязательно использует какой-то экзекьютор, это структура для оповещения о появлении результата или ошибки какого-то процесса, самим процессом она не владеет
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Борщевик Ёбаный
в том же зио, например, есть настройка рантайма как YieldOpsCount. Но не нашёл возможности указать методу вес или что-то в этом духе
К примеру, в ерланге поход из виртуальной машины в блокирующий энв стоит 1/10 или 1/20 от YieldOpsLimit, что позволяет немного проталкиваться с блокирующими операциями
не нашёл настройку таких весов для функций в зио, да и есть ли смысл так упарываться?
Эта настройка не относится к обсуждаемой теме
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Это для fairness
источник

R

RAFIZ in Scala User Group
и ещё. допустим у меня на этапе флоу элементы умножаются на два, а на синке - складываются (fold(0)(_ + _)), все эти операции одним актором будут исполняться или разными?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
и ещё. допустим у меня на этапе флоу элементы умножаются на два, а на синке - складываются (fold(0)(_ + _)), все эти операции одним актором будут исполняться или разными?
Заранее неизвестно, по умолчанию интерпретатор должен сфьюзить эти операции, но можно выключить с помощью атрибутов
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Зависит ещё от того, что перед флоу стоит. Но фьюзинг - это тёмная область и раньше часто менялось
источник

R

RAFIZ in Scala User Group
спасибо
источник

S

Simon in Scala User Group
Oleg ℕizhnik
Поэтому по умолчанию действительно есть два пула - один для всех акторов, и один маленький для scheduled для таймеров
А как же default-blocking-io-dispatcher? Он, конечно, странно сконфигурирован по умолчанию, но все еще используется стримами, например FileIO
источник