You won’t get far in programming without encountering situations in which you need to utilize concurrency and parallelization techniques to accomplish a task. Sometimes, we can get away with avoiding these, which is often the best course of action because it allows us to avoid complexity, but modern computers are highly parallelized, and any sufficiently complex system will require some degree of concurrency.
Asynchronous programming, often combined with parallelism, is a popular technique for handling concurrency. Async programming is, in many ways, just syntactic sugar that allows us to write code without having to exercise as many brain cells. We hide the complexity behind abstractions that free our thinking capacity for high-level problems, which, in turn, provides leverage to our skills.
To use async Rust effectively in a systems programming context, you need to understand what’s going on beneath the abstractions. But fear not, once you learn the definitions, abstractions, and jargon used in async Rust, you’ll find it a joy to use, warts and all.