Size: a a a

2020 September 30

MB

Mikail Bagishov in Rust Async
Даже если ты пошлешь его на отдельный тредпул, он продолжит отбирать ресурсы CPU у обычных футур
источник

AE

Alexey Ermakov in Rust Async
вафель 🧇
А как понять что блокирующего кода достаточно, чтобы засунуть его в spawn_bloking?

У меня в async fn достаточно много (?) вычислений, итерирации по массивам, оперирования хэшмапами, etc — приличный кусок 100% блокирующего кода. Думаю вот добавлять spawn_blocking или нет.
в доке, вроде, было мельком что-то сказано про блокирующее io
источник

в🧇

вафель 🧇 in Rust Async
Mikail Bagishov
Даже если ты пошлешь его на отдельный тредпул, он продолжит отбирать ресурсы CPU у обычных футур
CPU да, но у меня не настолько много расчётов чтобы это влияло. Просто в цикле ~пару раз в секунду проверяю некоторые время-зависимые данные.

Тут скорее интереснее что scheduler может иметь мало потоков для асинхронных операций (1-2?) и тогда это возможно станет проблемой.
источник

MB

Mikail Bagishov in Rust Async
Ну если он сейчас не тратит время попусту (например в нем ничего типа std::thread::sleep, синхронного IO и так далее), то непонятно как он может выиграть от spawn_blocking.
Количество потоков для исполнения футур задается настройкой core_threads и по-умолчанию равно кол-ву ядер ЕМНИП.
источник

в🧇

вафель 🧇 in Rust Async
Mikail Bagishov
Ну если он сейчас не тратит время попусту (например в нем ничего типа std::thread::sleep, синхронного IO и так далее), то непонятно как он может выиграть от spawn_blocking.
Количество потоков для исполнения футур задается настройкой core_threads и по-умолчанию равно кол-ву ядер ЕМНИП.
Он, не может, в теории могут выиграть другие футуры.
источник

в🧇

вафель 🧇 in Rust Async
Но идею понял, спасибо
источник

MB

Mikail Bagishov in Rust Async
Ну если ты аккуратно настроишь все, то какие-то отдельные показатели можно улучшить.
Например каким-то образом понизить приоритет потоков для этих блокирующих тасок. Тогда нормальные футуры действительно начнут работать быстрее (ну то есть больше поллов в секунду) ценой лишнего замедления этого CPU-heavy кода.
источник

в🧇

вафель 🧇 in Rust Async
Mikail Bagishov
Ну если он сейчас не тратит время попусту (например в нем ничего типа std::thread::sleep, синхронного IO и так далее), то непонятно как он может выиграть от spawn_blocking.
Количество потоков для исполнения футур задается настройкой core_threads и по-умолчанию равно кол-ву ядер ЕМНИП.
На счёт core_threads: по умолчанию то да, но это можно и изменить :) Я библиотеку пишу, так что хочу от всего предостеречься...
источник

MB

Mikail Bagishov in Rust Async
Ну в общем случае разные юзеры могут захотеть по-разному тюнить приоритеты.
Поэтому тогда, если есть такая возможность, ты можешь на вход брать трейт, который умеет спаунить футуры разных видов.
источник

MB

Mikail Bagishov in Rust Async
Или даже возвращать футуры и просить юзера самостоятельно заспавнить
источник

в🧇

вафель 🧇 in Rust Async
Кстати я может что-то путаю, но разве макрос не устанавливает по умолчанию один тред?

https://github.com/tokio-rs/tokio/blob/971ed2c6df9cb3bf3543a9c780662a0b4d1a8d40/tokio-macros/src/entry.rs#L131

В макросах так сложно разбираться...
источник

в🧇

вафель 🧇 in Rust Async
Mikail Bagishov
Или даже возвращать футуры и просить юзера самостоятельно заспавнить
Я уже...

Но тут вопрос всё же про блокирующий код внутри
источник

MB

Mikail Bagishov in Rust Async
spawn_blocking небесплатный. Каждая блокирующая таска сидит на своем потоке, то есть spawn_blocking может привести к запуску системного треда
источник

MB

Mikail Bagishov in Rust Async
вафель 🧇
Кстати я может что-то путаю, но разве макрос не устанавливает по умолчанию один тред?

https://github.com/tokio-rs/tokio/blob/971ed2c6df9cb3bf3543a9c780662a0b4d1a8d40/tokio-macros/src/entry.rs#L131

В макросах так сложно разбираться...
Если включен rt-threaded, то включается многопоточный экзекутор.
А для него core_threads вычисляется так: https://github.com/tokio-rs/tokio/blob/971ed2c6df9cb3bf3543a9c780662a0b4d1a8d40/tokio/src/runtime/builder.rs#L538
источник

в🧇

вафель 🧇 in Rust Async
min(512, num_cpus())

Ого ммм
источник
2020 October 01

KR

Kai Ren in Rust Async
гипер квад тред риппер?
источник

в🧇

вафель 🧇 in Rust Async
Kai Ren
гипер квад тред риппер?
Там max_threads с расчётом на блокирующее IO
источник

AI

Alex Ilizarov in Rust Async
Hirrolot
ну насколько помню, httparse довольно криво спроектирован
а че там не так?
источник

DF

Dollar Føølish in Rust Async
я не знаю что там не так но мне тоже интересно узнать
источник

M

Max in Rust Async
А разве блокирующий тред пул не отдельно от основного работает?
источник