Size: a a a

2020 September 13

AV

A V in Rust Async
фьюча как раз и есть cooperative-мультитаскинг
источник

AV

A V in Rust Async
и если во фьючи запихивать очень жирный по ЦП кусок кода, то рантайм может встать колом
источник

KB

Kirill Bulatov in Rust Async
Эх, опять перепутал, и правда наоборот)
источник

AV

A V in Rust Async
а корутины бывают разные в зависимости от языка )
источник

AV

A V in Rust Async
строго говоря, корутина - это всего лишь длинный паровоз кода, сцепленный yield/await.
источник

KB

Kirill Bulatov in Rust Async
А футуры — то, что мы сцепляем?
источник

AV

A V in Rust Async
и это абстракция на уровне языка - preemptive или cooperative - уже особенность реализации компилятора/планировщика
источник

AV

A V in Rust Async
де факто футура = корутина
источник

AV

A V in Rust Async
источник

KB

Kirill Bulatov in Rust Async
Спасибо, гляну.
источник

К

Коля🤔🎭 in Rust Async
А как можно запускать async функции из коробки? Без использования futures
источник

t

this is not mrklf in Rust Async
Коля🤔🎭
А как можно запускать async функции из коробки? Без использования futures
никак, нужен экзекутор
источник

MB

Mikail Bagishov in Rust Async
Коля🤔🎭
А как можно запускать async функции из коробки? Без использования futures
А что эта функция делает?
Если она использует какие-то фичи рантайма (например spawn, сокеты и т.д.), то этот рантайм необходимо иметь.
источник

MB

Mikail Bagishov in Rust Async
Если она ничем этим не пользуется, то сойдет максимально тупой "экзекутор" типа
fn block_on<F: Future> (mut fut: F) ->F::Output{
    let waker = futures::future::null_waker();
    futures::pin_mut!(fut);
    loop {
       if let Poll::Ready(out) = fut.poll(Context::from_waker(&waker)) {
            return out;
       }
    }
}
источник

AV

A V in Rust Async
Mikail Bagishov
А что эта функция делает?
Если она использует какие-то фичи рантайма (например spawn, сокеты и т.д.), то этот рантайм необходимо иметь.
бинго
источник

MB

Mikail Bagishov in Rust Async
Mikail Bagishov
Если она ничем этим не пользуется, то сойдет максимально тупой "экзекутор" типа
fn block_on<F: Future> (mut fut: F) ->F::Output{
    let waker = futures::future::null_waker();
    futures::pin_mut!(fut);
    loop {
       if let Poll::Ready(out) = fut.poll(Context::from_waker(&waker)) {
            return out;
       }
    }
}
Но в таком случае есть еще более простое решение: не помечать эту функцию как async :)
источник

AV

A V in Rust Async
async - это вообще не про "много выполнять", а про "много ожидать" :)
источник

A

Apachee in Rust Async
Коля🤔🎭
А как можно запускать async функции из коробки? Без использования futures
на tokio.rs в гайде есть пример создания своего простейшего экзекутора для асинка
источник
2020 September 16

YM

Yaro M in Rust Async
доброго дня всем.
из доки  tokio::select! :
"Wait on multiple concurrent branches, returning when the first branch completes, cancelling the remaining branches"

> cancelling the remaining branches
как происходит cancelling, могу ли я перехватить cancelling в футуре к которой он применяется ?
источник

r

red75prime in Rust Async
Yaro M
доброго дня всем.
из доки  tokio::select! :
"Wait on multiple concurrent branches, returning when the first branch completes, cancelling the remaining branches"

> cancelling the remaining branches
как происходит cancelling, могу ли я перехватить cancelling в футуре к которой он применяется ?
Футура перестаёт поллиться и дропается. Перехватить дроп можно написав свою обёртку для футуры.
источник