
Вы неправильно пишете асинхронный Rust: .await там, где его не должно быть
Самая распространённая ошибка в асинхронном Rust — убеждение, что .await означает «подожди, пока операция завершится». Слово в переводе буквально это и значит, поэтому многие расставляют .await после каждого...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Самая распространённая ошибка в асинхронном Rust — убеждение, что . await означает «подожди, пока операция завершится». Слово в переводе буквально это и значит, поэтому многие расставляют .
await после каждого асинхронного вызова, как точки в конце предложений. А потом оказывается, что сервер обрабатывает один запрос вместо сотни одновременно, мьютекс намертво виснет с одним-единственным вызовом, отмена в select! теряет половину сообщений, и синхронная версия того же кода работает быстрее.
Технические детали
Корень всех этих проблем один: . await не означает «жди». Он означает «дай исполнителю право приостановить меня здесь».
И пока вы держите в голове первое значение, асинхронный Rust будет вас наказывать. В статье рассмотрим что компилятор делает с async fn, зачем нужен Pin, как Tokio решает какую задачу опросить следующей, почему std::sync::Mutex в асинхронном коде иногда срабатывает как мина, и почему даже tokio::sync::Mutex может зависнуть.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





