Size: a a a

2021 April 17

D

Denis in Rust Async
ну.. поубирать зависимости =)
источник

D

Dima in Rust Async
опрос, а как вы понимаете когда цпу работу можно сделать на  рантайме, а когда нужно выносить в отдельный тредпул, мб у кого-то есть рецепт?
источник

D

Denis in Rust Async
ну если у тебя приложение начинает тормозить из-за того, что "цпу-работа" блочит исполнение, значит, пришло время выносить =)
источник

G

George in Rust Async
У меня их всего ~25. Проблема в том, что это монстры типо tokio, actix-web и serde. И получается почти 700 в итоге. Хотя в локе всего 240 секций [[package]].
источник

D

Denis in Rust Async
мб фичи подкрутить?
источник

D

Denis in Rust Async
default-features = false + активация только нужных
источник

D

Dima in Rust Async
куда выносить? в какой момент? если у меня цпу работа занимает 1 ms допустим,стоит ли? если да, то как? spawn_blocking, block_in_place, rayon thread_pool?
источник

D

Denis in Rust Async
я не знаю, для твоего приложения 1ms это много или мало, наверное надо из этого исходить — тебе ок, что в течение 1ms остальные таски с некоторой вероятностью будут отдыхать? ну, зачастую это ок, хотя для каких-нибудь высоконагруженных приложений с высокими требованиями к latency это уже может быть вообще совсем не ок
про rayon я вообще не понял, причём тут он, ещё бы thread::spawn вспомнил :)
а про выбор между spawn_blocking и block_in_place — у них же семантика принципиально разная, используй то, что тебе подходит
источник

D

Denis in Rust Async
> такое фингерпринты и зачем их убирать
ну, например, там содержится инфа о таймспатмах собранных пакетов/файлов/...
и, скажем, если ты создаёшь новый файл, а потом заменяешь его старым, то cargo может решить, что ничего не изменилось и не пересобирать его заново
источник

D

Dima in Rust Async
rayon при том что это "рекомендованный" способ делать цпу работу в асинк приложнениях, но это не отвечает на вопрос насколько я могу заблочить рантайм чтоб все было ок
источник

D

Denis in Rust Async
кем рекомендованный? =) ну так или иначе, то, как ты конкретно собираешься выполнять cpu-bound таски, не имеет принципиального значения
с точки зрения токио, у тебя вариантов не так много: либо  spawn_blocking/block_in_place, либо запускать отдельно тредпул и общаться с ним из асинк-кода посредством каналов

> насколько я могу заблочить рантайм чтоб все было ок
это зависит целиком и полностью от твоих хотелок
источник

D

Denis in Rust Async
в качестве дженерик-совета могу предложить начинать использовать spawn_blocking/block_in_place только тогда, когда выполнение cpu-bound задач в рамках асинхронного кода начинает приносить проблемы
источник

D

Dima in Rust Async
источник

D

Dima in Rust Async
ладно вопрос не в этом, спасибо
источник

D

Denis in Rust Async
а в чём?
источник

D

Denis in Rust Async
если тебе нужно конкретное, формальное правило "когда выносить cpu-bound код", то его попросту не существует
источник

D

Denis in Rust Async
хотя конечно есть эвристики — но они.. как бы это сказать.. opinionated
источник

D

Dima in Rust Async
ну так и я спрашивал мб есть рецепт у кого-то
источник

D

Denis in Rust Async
ну например такой есть: если ты видишь, что у тебя общее выполнение начинает тормозить (скажем, новые соединения подолгу не принимаются), и при этом постоянно забито только одно ядро из многих, значит, пора отгружать выполнение куда-то =)
источник

D

Dima in Rust Async
ну так себе совет, ладно спасибо
источник