Как на самом деле работает .await: пишем свой async-рантайм на Rust с нуля

Каждый раз, когда вы пишете .await, происходит не магия, а вполне конкретный механизм: Future, Waker и опрос состояния. Чтобы увидеть это своими глазами, я написал собственный async-рантайм на Rust с нуля - с executor, reactor на epoll и рабочим TCP-эхо-сервером. По пути разобрался, как именно tokio будит ваши задачи, и нашёл баг, который тихо висел у меня в проде. Внутри - весь код целиком и объяснение без отсылок к чёрным ящикам.

https://habr.com/ru/articles/1050160/

#rust #async #tokio #future #waker #executor

Как на самом деле работает .await: пишем свой async-рантайм на Rust с нуля

Если попросить среднего Rust-разработчика объяснить, что делает .await , в ответ обычно звучит что-то про «приостанавливает выполнение, пока не придут данные». Это верно ровно настолько же, насколько...

Хабр
Async Task Locals From Scratch

Some literate programming on a small crate I've written

wolfgirl.dev

Can someone recommend some good up-to-date resources on #rust #async internals?

Last I checked, the nicest and the most informative were the blogpost series by https://without.boats on his website, but they are a few years old now and things and terminology seem to have changed since then.

#rust #async #programming #tokio

Without boats, dreams dry up

It might not look like much, but #JetBrains Rider just released (EAP6) a debugger update that displays asynchronous Tasks in a way that makes them feel like synchronous code. Thank goodness!

#dotnet #async #csharp

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

Миллион асинхронных задач на Rust спокойно живёт в нескольких сотнях мегабайт. Сто тысяч корутин на Python нередко упираются в память раньше. Дело не в том, что “Rust быстрый, а Python медленный” - дело в том, ГДЕ физически лежит состояние приостановленной задачи. Разбираю, во что превращается ваш async fn после компиляции: стейт-машина на стеке против объекта в куче. Сравниваю модели Rust (Tokio), Python (asyncio), C# и JavaScript - кто аллоцирует на каждый await, а кто нет, и почему это видно на счётчике RAM при 100k задач. Внутри: что генерирует компилятор, куда уезжает состояние между await, stackful против stackless, и что с этим делать сегодня.

https://habr.com/ru/articles/1046862/

#async #await #корутины #Rust #Tokio #asyncio #конкурентность

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

TL;DR. async fn компилируется в стейт-машину во всех языках, но кладут её по-разному. Rust генерирует enum фиксированного размера, который живёт на стеке вызывающего и не аллоцируется. CPython...

Хабр

Асинхронный django: новые начинания

Здравствуйте, дорогие читатели! Сегодня - ещё одна статья из рубрики джангологии. Раньше я уже писал о своих идеях ( 1 и 2 ) о том, как сделать django асинхронным. Они основывались, вслед за sqlalchemy, на использовании гринлетов. Несмотря на то, что proof-of-concept был успешно получен, а трудностей - встречено меньше, чем ожидалось, я всё-таки отказался от этого подхода: во-первых, он уже применяется в sqlalchemy. Во-вторых, это ведёт к усложнению, и растёт так называемая test matrix - потому что поддерживается как синхронный случай, так и асинхронный. А simple, как мы знаем, is better than complex. Так вот, я решил возобновить эти свои попытки, изменив подход на более радикальный. А именно, необратимо переписать django на async-only, сломав совместимость полностью. Для этого потребуется заменить в половине функций def на async def и добавив await при их вызове. Я уверен, что такой подход лучше. Не то, чтобы асинхронный django был очень кому-нибудь нужен, особенно теперь, или от этого будет какой-то фантастический выигрыш в производительности - дело в том, что я хочу попробовать на практике агентное программирование, а это, как раз подходящий проект: есть чёткий план и много кода, который нужно менять.

https://habr.com/ru/articles/1046604/

#python #django #async #fork

Асинхронный django: новые начинания

Здравствуйте, дорогие читатели! Сегодня - ещё одна статья из рубрики джангологии. Раньше я уже писал о своих идеях ( 1 и 2 ) о том, как сделать django асинхронным. Они основывались, вслед за...

Хабр
🤖 So, an #AI enthusiast believes that with enough #computational elbow grease, even Rust's famously convoluted #async features can be untangled. 🙄 Apparently, it takes mere mortals 20-25 hours to craft a single article—thank goodness we have machines to do the #thinking now, or we'd never get through the nightmarish syntax of Rust! 🌐
https://aibodh.com/posts/async-rust-chapter-1-hands-on-intro-to-async-rust/ #Rust #Development #HackerNews #ngated
Who Runs Your Rust Future? Hands-On Intro to Async Rust

Ever wonder what actually runs your async code in Rust? Build it yourself: the smallest engine that runs an async job to completion, and learn how futures and runtimes really work along the way.

AIBodh
Who Runs Your Rust Future? Hands-On Intro to Async Rust

Ever wonder what actually runs your async code in Rust? Build it yourself: the smallest engine that runs an async job to completion, and learn how futures and runtimes really work along the way.

AIBodh

#Development #Pitfalls
The quiet problem with unnecessary async · “It changes the shape of the code around it.” https://ilo.im/16dkjt

_____
#Programming #Coding #JavaScript #Async #WebDev #Frontend #Backend

The quiet problem with unnecessary async - Matt Smith

Not every JavaScript function needs to be async. Unnecessary async boundaries can spread Promise-based complexity through an entire application.

This messed me up. My family has dealt with this. Hugs to all who are dealing with this situation. youtu.be/4KtEgWcka5I?... #mental #health #async #stilllife

Louis Theroux: Inside America'...
Louis Theroux: Inside America's Largest Dementia Capital

YouTube