Light-Weight Threading / Continuations / Async-Await
Many languages have recently introduced light-weight threading mechanisms, basically an extension to coroutines that allows yielding not only in the called function, but also deeper down in the call chain. In particular, a light-weight thread would yield on blocking I/O. In I/O intensive applications (e.g., web servers), this can result in better performance since the kernel-mode thread switch overhead in case of blocking I/O is replaced by the cheaper user-mode switch to another light-weight thread.
Approaches in other Languages
JavaProject Loom introduces fibres and continuations in Project Loom.
Go presents synchronous I/O in its APIs, but implements it using async I/O that permits fast context switches to other goroutines, see go scheduler.
Splits world in async and synchronous functions, see what Color is your Function.
How important is this in other applications than web-servers? Do improvements in OS kernels maybe make this user-mode scheduling obsolete?