Size: a a a

Scala User Group

2020 November 19

Oℕ

Oleg ℕizhnik in Scala User Group
предположу, что такое повежение IO.cancelable может самоустраниться при переходе на zio или cats-effect 3
источник

Oℕ

Oleg ℕizhnik in Scala User Group
но это требует экспериментального подтверждения
источник

R

RAFIZ in Scala User Group
как известно, в акковском дефолтном system.dispatcher находится ForkJoinPool

кто может пояснить, а в чём там форк и в чём там джойн, собственно? не делится же запрос, пришедший на эндпоинт на два сабтаска и тд

предположим, что в приложении есть только один роут, который делает просто complete("hello")
источник

AD

Apache DOG™ in Scala User Group
RAFIZ
как известно, в акковском дефолтном system.dispatcher находится ForkJoinPool

кто может пояснить, а в чём там форк и в чём там джойн, собственно? не делится же запрос, пришедший на эндпоинт на два сабтаска и тд

предположим, что в приложении есть только один роут, который делает просто complete("hello")
По вашему сервер обрабатывает один запрос в один момент?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Здесь нужно почитать про ФЖП, тут дело вообще не в том, как запросы делятся, а как Runnable раскидываются по тредам
источник

NG

Nick Gushchin in Scala User Group
Oleg ℕizhnik
предположу, что у вас cats.effect.IO
Да, в точку)
источник

R

RAFIZ in Scala User Group
Apache DOG™
По вашему сервер обрабатывает один запрос в один момент?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Я могу ошибаться, но примерно опишу.
В классических пулах раннабл привязывается к треду сразу.
Тред имеет право завершиться только когда у него нет раннаблов,  и создаётся с пустой очередью.
ФЖП умеет взять тред, на котором слишком много задач и создать новый тред, перенеся на него часть.
И наоборот, имея два не очень нагруженных треда, может перенести задачи с одного на другой, и один завершить.
Ну и наконец имея нагруженный и не очень нагруженный может перенести часть задач с первого на второй.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
собственно, вот эти разветвления и склеивания тредов - воркеров и называются fork и join
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
Я могу ошибаться, но примерно опишу.
В классических пулах раннабл привязывается к треду сразу.
Тред имеет право завершиться только когда у него нет раннаблов,  и создаётся с пустой очередью.
ФЖП умеет взять тред, на котором слишком много задач и создать новый тред, перенеся на него часть.
И наоборот, имея два не очень нагруженных треда, может перенести задачи с одного на другой, и один завершить.
Ну и наконец имея нагруженный и не очень нагруженный может перенести часть задач с первого на второй.
ну вот, то есть не сами запросы бьёт на части, а потом джойнит, а просто приход самого запроса отдаёт в очереди тех тредов, которые курят (или вообще ещё не созданы), верно?
источник

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
Oleg ℕizhnik
обработка запроса, если делается на каких-то фьючах, котоэффектах и т.п. хоть и выглядит последовательно - это куча независимых тасков
ну для фьюч отдельные пулы (которые могут быть вообще не фжп) выделяют и тд. я поэтому и задал вопрос с простейшим хэндлером. который просто на каждый запрос возвращает строчку

у меня вопрос именно по фжп
источник

Oℕ

Oleg ℕizhnik in Scala User Group
не важно, какой у вас хендлер
источник

Oℕ

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

Oℕ

Oleg ℕizhnik in Scala User Group
и это не связано никак с фжп
источник

Oℕ

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

ЮБ

Юрий Бадальянц... in Scala User Group
ForkJoinPool ещё называют WorkStealingPool. Описание Олега как раз про это. А вообще есть доклад Шипилева про этот пул с кучей деталей. Рекомендую
источник

TT

Taika Tytto in Scala User Group
Юрий Бадальянц
ForkJoinPool ещё называют WorkStealingPool. Описание Олега как раз про это. А вообще есть доклад Шипилева про этот пул с кучей деталей. Рекомендую
источник