Size: a a a

Scala User Group

2020 November 19

R

RAFIZ in Scala User Group
а какие гарантии есть?если мы этому параметру присваиваем значение 1, например
источник

R

RAFIZ in Scala User Group
ну или 100, как на скриншоте
источник

R

RAFIZ in Scala User Group
вот это закомменченное объяснение все равно оставило вопросы
источник

Oℕ

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

NG

Nick Gushchin in Scala User Group
Oleg ℕizhnik
возможно, что отмена происходит где-то в конце, когда тест завершается, и пока один из стримов уже отменён, фс2 успевает ещё один запустить
Хм
А это интересно
Спасибо, я попробую withPermit)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Oleg ℕizhnik
это нужно трактовать "максимально количество сообщений, которое обработается синхронно, если в очереди есть не меньше этого количества"
т.е. это настройка производительности, если актор очень быстро работает, вам выгоднее это число побольше поставить, чтобы меньше было оверхеда на переключение
а если актор долго работу делает, лучше поставить поменьше, чтобы толстые акторы не тормозили систему
считайте это примерным аналогом batchSize \ chunkSize в потоковой обработке
источник

R

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

Oℕ

Oleg ℕizhnik in Scala User Group
настройка не обновляется

работает примерно так

def processActor() = {
   val messages = mailBox.take(throughput)
   for (m, sender) <- messages
      actor.receive(m)(sender)
}
источник

R

RAFIZ in Scala User Group
мм
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. когда переключается на новый актор, попытается прочитать из очереди throughput сообщений или меньше и обработать их в один присест
источник

R

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

R

RAFIZ in Scala User Group
Oleg ℕizhnik
настройка не обновляется

работает примерно так

def processActor() = {
   val messages = mailBox.take(throughput)
   for (m, sender) <- messages
      actor.receive(m)(sender)
}
один поток например. два актора. throughput = 100

пока актор А обрабатывал 100 сообщений, актору Б и самому актору А пришло ещё по 100.

куда пойдёт поток?
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
настройка не обновляется

работает примерно так

def processActor() = {
   val messages = mailBox.take(throughput)
   for (m, sender) <- messages
      actor.receive(m)(sender)
}
а так вот это понятно, спасибо
источник

R

RAFIZ in Scala User Group
ещё вот этих трёх параметров нет в оф. документации ThreadPoolExecutor

кто знает чему они соответствуют в классе ThreadPoolExecutor?

скриншот взялся с этой страницы доки акки
источник

Oℕ

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

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
один поток например. два актора. throughput = 100

пока актор А обрабатывал 100 сообщений, актору Б и самому актору А пришло ещё по 100.

куда пойдёт поток?
неизвестно
источник

NG

Nick Gushchin in Scala User Group
Oleg ℕizhnik
возможно, что отмена происходит где-то в конце, когда тест завершается, и пока один из стримов уже отменён, фс2 успевает ещё один запустить
Олег, эта версия подтвердилась:

Я поменял семафор на очередь, чтобы избавиться от прерывания осноного стрима (pipeline.analyze) и в общем-то логи говорят сами за себя:

 - putToQueue
- putToQueue
- putToQueue
- putToQueue
-  It's done
- putToQueue


fs2 успевает еще один сабстрим запустить во время завершения основного стрима
источник

NG

Nick Gushchin in Scala User Group
Oleg ℕizhnik
возможно, что отмена происходит где-то в конце, когда тест завершается, и пока один из стримов уже отменён, фс2 успевает ещё один запустить
источник

NG

Nick Gushchin in Scala User Group
Oleg ℕizhnik
возможно, что отмена происходит где-то в конце, когда тест завершается, и пока один из стримов уже отменён, фс2 успевает ещё один запустить
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nick Gushchin
Олег, эта версия подтвердилась:

Я поменял семафор на очередь, чтобы избавиться от прерывания осноного стрима (pipeline.analyze) и в общем-то логи говорят сами за себя:

 - putToQueue
- putToQueue
- putToQueue
- putToQueue
-  It's done
- putToQueue


fs2 успевает еще один сабстрим запустить во время завершения основного стрима
предположу, что у вас cats.effect.IO
источник