Callback based approaches
Note!
This is another example of M:N threading. Many tasks can run concurrently on one OS thread. Each task consists of a chain of callbacks.
You probably already know what we’re going to talk about in the next paragraphs from JavaScript, which I assume most know.
The whole idea behind a callback-based approach is to save a pointer to a set of instructions we want to run later together with whatever state is needed. In Rust, this would be a closure.
Implementing callbacks is relatively easy in most languages. They don’t require any context switching or pre-allocated memory for each task.
However, representing concurrent operations using callbacks requires you to write the program in a radically different way from the start. Re-writing a program that uses a normal sequential program flow to one using callbacks represents a substantial rewrite, and the same goes the other way.
Callback-based concurrency can be hard to reason...