Size: a a a

2020 December 04

E

Eugene in Rust Beginners
а может быть такое, что при буфферизованном чтении файла и отправке прочитанных байт по grpc порядок получения этих байт меняется из-за async-кода?
источник

E

Eugene in Rust Beginners
вобщем, есть async метод, который читает файл в байтовый буффер и отправляет этот буффер по сети
источник

E

Eugene in Rust Beginners
может ли порядок отправки этих байт по сети меняться?
источник

E

Eugene in Rust Beginners
отправку делаю через mpsc::channel в tokio::spawn
источник

r

red75prime in Rust Beginners
Один файл и один получатель grpc? Не вижу что там может быть не так. Разве что grpc не гарантирует порядок доставки сообщений, но тут я не подскажу, не имел с ним дела.
источник

E

Eugene in Rust Beginners
red75prime
Один файл и один получатель grpc? Не вижу что там может быть не так. Разве что grpc не гарантирует порядок доставки сообщений, но тут я не подскажу, не имел с ним дела.
понятно
источник

E

Eugene in Rust Beginners
red75prime
Один файл и один получатель grpc? Не вижу что там может быть не так. Разве что grpc не гарантирует порядок доставки сообщений, но тут я не подскажу, не имел с ним дела.
есть сомнения, что последовательность отправки буфферов меняется
источник

r

red75prime in Rust Beginners
Eugene
есть сомнения, что последовательность отправки буфферов меняется
Файл читается через read? Количество прочитанных байтов учитывается при отправке?
источник

E

Eugene in Rust Beginners
red75prime
Файл читается через read? Количество прочитанных байтов учитывается при отправке?
да, через read; да учитывается
источник

E

Eugene in Rust Beginners
в цикле читается файл в буффер, пока read возвращает значение > 0
источник

/

/bin/cat in Rust Beginners
что дают async запросы, если для обработки данных все равно нужно сделать await?
источник

/

/bin/cat in Rust Beginners
не буду далеко ходить за примером и возьму teloxide
let response = client
       .post(&super::method_url(TELEGRAM_API_URL, token, method_name))
       .multipart(params)
       .send()
       .await
       .map_err(RequestError::NetworkError)?;
источник

H

Hirrolot in Rust Beginners
ничего не делают потому что пока футуру не awaitнуть она не будет исполняться
источник

/

/bin/cat in Rust Beginners
просто какая разница будет с blocking клиентом?
источник

/

/bin/cat in Rust Beginners
все равно нужно ждать, когда придут данные от I/O
источник

DO

Do c Tor O r` Ry in Rust Beginners
/bin/cat
что дают async запросы, если для обработки данных все равно нужно сделать await?
пока ждешь что-то другое выполняется
источник

/

/bin/cat in Rust Beginners
Do c Tor O r` Ry
пока ждешь что-то другое выполняется
"что-то другое" зависит от конфигурации tokio::main?
источник

DO

Do c Tor O r` Ry in Rust Beginners
/bin/cat
"что-то другое" зависит от конфигурации tokio::main?
зависит от в целом от твоего кода
источник

G

George in Rust Beginners
/bin/cat
"что-то другое" зависит от конфигурации tokio::main?
Вы из какого языка в целом пришли? Просто если брать типовой пример, который хорошо ложится на любой язык с асинком - то есть веб-сервера - то сразу понятно, зачем оно там. Понятно, если понимать, зачем вообще асинк нужон.

Стандартная конфигурация сервера: родительский поток и N потоков-исполнителей. Каждый запрос серверу направляется в один из потоков, дальше поток пакует его в футуру и время от времени поллит на предмет исполнения. Если уже исполнился - возвращает. Внутри футуры могут происходить аналогичные действия - пошли в базу, сделали запрос к другому сервису, etc - передали управление другому запросу на том же потоке. Таким образом засчёт передачи времени ожидания другим запросам, типичный асинхронный сервер может обрабатывать больше запросов, чем аналогичный по конфигурации или более сложный синхронный. Асинк легковеснее полноценных потоков/процессов, Асинк удобнее очередей.
Тут из контрпримеров разве что Elixir и его "миллионы" микропотоков, но там свои архитектурные особенности.
источник

AG

Alexey Gnevashev in Rust Beginners
А ведь правда, что нет стандартного метода из двух обычных итераторов сделать один, который бы обходил декартово произведение? Ну типа получить аналогию yield из двух вложенных циклов.
источник