I don't know what the old M:N model did, but a compiler can generate essentially the same code as it does for async/await without ever specifying "async" or "await." The reason for that is that the compiler already compiles any subroutine into a state machine (because that's what a subroutine is) in a form you need for suspension. But you do need to know what that form is, hence the required change in LLVM.
There is no inherent reason why it would be any slower or faster. It also does not imply any particular scheduling mechanism.
There is no inherent reason why it would be any slower or faster. It also does not imply any particular scheduling mechanism.