В Tokio уничтожили JoinHandle незавершённой задачи: продолжит ли задача выполняться?
База Hintsage
Программирование Rust
Язык Rust и безопасное системное программирование.
Темы раздела
Выберите подраздел
- 0 вопросов
Общие вопросы
Смешанные вопросы по Rust.
Открыть раздел - 49 вопросов
Rust Core
Типы, pattern matching, modules и базовая семантика.
Открыть раздел - 50 вопросов
Владение и заимствование
Ownership, borrowing, moves и правила безопасной памяти.
Открыть раздел - 50 вопросов
Времена жизни
Lifetime annotations и связи времени жизни ссылок.
Открыть раздел - 49 вопросов
Traits и generics
Traits, bounds, generics, associated types и dispatch.
Открыть раздел - 50 вопросов
Конкурентность и async
Send/Sync, threads, channels, futures и async runtime.
Открыть раздел - 50 вопросов
Обработка ошибок
Result, Option, оператор ?, panic и проектирование ошибок.
Открыть раздел - 50 вопросов
Unsafe и память
Unsafe Rust, raw pointers, FFI и инварианты безопасности.
Открыть раздел
Практика
Вопросы: Программирование Rust
В многопоточном Tokio одна задача выполняет длинные серии быстрых операций внутри одного poll; как кооперативный бюджет предотвращает голодание остальных задач?
В практической ситуации async-функцию вызвали, но полученный future не передали runtime и не ожидали: когда начнётся тело функции?
При росте числа CPU-bound задач, переданных в spawn_blocking, почему их выполнение не становится неограниченно параллельным?
В контейнере нужно хранить несколько async-задач с разными конкретными типами future. Какой приём Rust позволяет представить их единым типом?
Сравните семантику Future и Stream: почему одно ожидание Future получает итоговое значение, тогда как Stream нужно опрашивать многократно?
Задача Tokio завершилась паникой: каким образом эта паника достигает вызывающей async-задачи через JoinHandle?
Как OnceLock<T> безопасно публикует лениво созданное значение для нескольких потоков?
В Tokio несколько задач одновременно ждут один async mutex: гарантирован ли порядок FIFO выдачи блокировки?
Каким способом многопоточный async runtime запускает future, которая не реализует Send, без передачи её между рабочими потоками?
Функция передаёт заимствованные данные в задачу многопоточного async runtime, которая может завершиться позже самой функции: какое требование к времени жизни future предотвращает висячую ссылку?
В lock-free стеке CAS видит указатель A после последовательности A→B→A: какую ошибку проверки это создаёт?
После уничтожения runtime Tokio что произойдёт с незавершённой async-задачей, созданной в нём?
В однопоточном runtime две задачи используют yield_now().await. Разберите, гарантирует ли этот вызов строгую очерёдность их выполнения.
use tokio::task::yield_now;
#[tokio::main(flavor = "current_thread")]
async fn main() {
tokio::join!(worker("A"), worker("B"));
}
async fn worker(name: &'static str) {
for i in 0..3 {
println!("{name}: {i}");
yield_now().await;
}
}
Когда RwLock<T> в Rust может проиграть Mutex<T> на преимущественно читающей нагрузке?
Гарантируют ли маркеры Send и Sync отсутствие логических гонок в многопоточном Rust?
Поток ожидает условие через Condvar: почему пробуждение не доказывает, что условие уже выполнено?
Какой инвариант должен соблюдать многопоточный async runtime при планировании одной future?
В async-коде нужно определить, является ли значение из thread_local! локальным для задачи. Какой результат допустим после передачи задачи между рабочими потоками?
use std::cell::Cell;
use tokio::task::yield_now;
thread_local! {
static POLLS: Cell<u32> = Cell::new(0);
}
#[tokio::main(flavor = "multi_thread", worker_threads = 2)]
async fn main() {
let task = tokio::spawn(async {
POLLS.with(|p| p.set(p.get() + 1));
yield_now().await;
POLLS.with(|p| p.get())
});
println!("{}", task.await.unwrap());
}
В системе несколько потоков клонируют Sender одного канала std::sync::mpsc: почему сообщения распределяются между потребителями, а не рассылаются каждому из них?
Показано 101–120 из 348