Skip to content

Instantly share code, notes, and snippets.

@polachok
Last active September 15, 2018 22:06
Show Gist options
  • Save polachok/72522fdb511c6448f4f95939046425e7 to your computer and use it in GitHub Desktop.
Save polachok/72522fdb511c6448f4f95939046425e7 to your computer and use it in GitHub Desktop.
Futures & tokio FAQ (ru)

Что такое future?

Future это тип, для которого имплементирован трейт Future

Кто вызывает poll()?

Executor. Это может быть ивент-луп, тред пул или что-то еще.

Какие фьючи выбрать, есть 0.1 и 0.3?

0.3 экспериментальная версия, сейчас все используют 0.1. Принципиальных различий между ними нет.

Устал писать and_then(..).and_then(..), когда уже будет async/await?

Уже есть в nightly для futures 0.3. Но tokio пока использует futures 0.1. Есть экспериментальная поддержка

Что почитать по фьючам и tokio?

Краткое введение: https://tokio.rs/ Немного про то как работает Executor: http://rust-lang-nursery.github.io/futures-rs/blog/2018/08/17/toykio.html ...

Как работать с файлами и не блокироваться?

https://docs.rs/tokio-fs/0.1.3/tokio_fs/

Как работать со стандартным вводом/выводом?

https://docs.rs/tokio/0.1.8/tokio/io/fn.stdin.html https://docs.rs/tokio/0.1.8/tokio/io/fn.stdout.html

У меня синхронный драйвер бд, что делать?

Использовать blocking.

Что такое таск (task)?

Task это фьюча верхнего уровня. Т.е. то что передается в tokio::run(..) или tokio::spawn(..). Каждый spawn() создает новый таск. Таск подобен треду операционной системы, но является легковесным.

Как tokio работает с тасками?

Дефолтный рантайм tokio запускает тред пул. Таски разбирают треды из пула.

Сделал wait() на фьюче и все зависло..?

Все верно, так и должно быть! Вы заблокировали текущий тред и теперь ивент луп не может продолжить работу. Безопасно вызывать .wait() можно только на фьючах отправленных в тред пул.

У меня остались еще вопросы, где их можно задать?

https://t.me/tokio_rust

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment