Size: a a a

2020 December 18

DF

Dollar Føølish in Rust Async
А, сорри , недопетрил
источник

AZ

Alexander Zaitsev in Rust Async
решаемая проблема: если есть конкуренция за системные ресурсы, в первую очередь их отдавать задачам с более высоким приоритетом
источник

MB

Mikail Bagishov in Rust Async
Возможно, можно собственный шедулер с приоритетами руками написать.

Если все запускаемые футуры обернуты в некоторый тип с кастомным impl Future, то он обладает всеми необходимыми знаниями (какие футуры готовы к исполнению, какие футуры уже запущены и т.д.), так что технически это возможно. Что там будет с перформансом - не знаю.
источник

MB

Mikail Bagishov in Rust Async
По сути надо отслеживать, сколько приоритетных футур готовы к выполнению. И если у нас приоритет низкий, и таких ненулевое количество, то делаем yield.
источник

DF

Dollar Føølish in Rust Async
А кто елду то делать будет? Футура сама?
источник

AZ

Alexander Zaitsev in Rust Async
а в токио сейчас можно в рантайм подсунуть свой scheduler?
источник

MB

Mikail Bagishov in Rust Async
Dollar Føølish
А кто елду то делать будет? Футура сама?
Я полагаю, что каждая футура завернута в  обертку. Тогда эта обертка в начале своего poll()-а решает, надо ли вызвать внутренний poll() или сделать yield.
источник

DF

Dollar Føølish in Rust Async
Да, я примерно так и понял, спасибо
источник

AZ

Alexander Zaitsev in Rust Async
технически это понятно, что возможно (раз приоритеты есть в других похожих вещах)
источник

MB

Mikail Bagishov in Rust Async
Ну и это даже выглядит не так уж и плохо в плане перформанса
источник

MB

Mikail Bagishov in Rust Async
Но конечно небесплатно, в самом токио это можно сделать эффективнее
источник

m

magras in Rust Async
Когда я заглядывал в сырцы tokio, видел код который если я правильно понял, обеспечивает fairness. На сколько я понял, он старается понижать приоритет таскок которые уже потратили слишком много времени. Возможно можно модификацией этого кода добится необходимого результата.
источник

m

magras in Rust Async
Но я код смотрел по диагонали, поэтому могу быть не прав.
источник

AZ

Alexander Zaitsev in Rust Async
в любом случае - в токио если это и появится, то ещё нескоро :) а для себя пока что просто забил на это и всё
источник

MB

Mikail Bagishov in Rust Async
источник

MB

Mikail Bagishov in Rust Async
низкоприоритетные стоят очень дешево.
Высокоприоритетные делают некоторое количество аллокаций. (В наивной версии - на каждый poll. Если немного кэшировать - то только при смене waker-а).

Все ордеринги, полагаю, можно сделать Relaxed-ами.
источник

IB

Ivan Boldyrev in Rust Async
Dollar Føølish
А, сорри , недопетрил
Нет, это не про сети Петри :)
источник

PL

Paul ❌ Loyd in Rust Async
Denis Otkydach
А не лучше отдельный тред (и приоритет ему, если надо) выделить под rt?
Тут rt скорее как приоритет. Как в линуксе. Достаточно два уровня приоритетов.
источник

PL

Paul ❌ Loyd in Rust Async
Mikail Bagishov
Возможно, можно собственный шедулер с приоритетами руками написать.

Если все запускаемые футуры обернуты в некоторый тип с кастомным impl Future, то он обладает всеми необходимыми знаниями (какие футуры готовы к исполнению, какие футуры уже запущены и т.д.), так что технически это возможно. Что там будет с перформансом - не знаю.
В Токио рантайм не предполагает свои скедулеры. А без Токио варианты и так есть, тот же glommio
источник

PL

Paul ❌ Loyd in Rust Async
Mikail Bagishov
Возможно, можно собственный шедулер с приоритетами руками написать.

Если все запускаемые футуры обернуты в некоторый тип с кастомным impl Future, то он обладает всеми необходимыми знаниями (какие футуры готовы к исполнению, какие футуры уже запущены и т.д.), так что технически это возможно. Что там будет с перформансом - не знаю.
Ну вот я такое решение и предполагал найти. Но минус понятен, перебор тасок. Ну и флаг для хранения большой контеншн иметь будет. Но можно для начала в TLS, то есть внутри воркера приоритет отдавать.
источник