Asynchronous I/O is nothing new or special. It is in hardware since 60s.
The core concepts are Interrupts (or IRQs), Signals and Continuation Passing Style (CPS) in general.
Basically, it is a delegation - perform this operation and call me when it is complete (or an error occurred).
The crucial difference is that the control will be returned to the caller before an operation is completer or even started.
A registered "callback" routine will be called upon completion, so the caller will be interrupted.
After an "interrupt" will be handled, the caller will continue from where it was interrupted "as if nothing happened".
Signals are software interrupts. AIO must be part of an OS. The code must use the same mechanism an OS uses (interrupts, signals, etc).
Nothing to see here.
All the NodeJS and Python madness with async without explicit interrupts is just ignorant hipster's snowflakery bullshit.
Signals, CPS and FSM will do.