It's important to note that for most small devices that run MicroPython asyncio is the only available method of concurrency.
These devices have no concept of processes, your application is the only thing that runs. Most devices do not support threads, and those that do have really big limitations. Like for example, a device with two cores would allow you to spawn just one thread, to run on the second core and that's it. This is due to the lack of a proper operating system with a scheduler that can move threads in and out of the CPU.
Yes .. alas .. eLua doesn’t natively handle multi-core execution, so any cross-CPU functionality requires custom integration. It is is small, light, and tight as things go - but nevertheless, coroutines and core-specific tasking can yield benefits in the power-consumption stats, too.
I will definitely push microPython for some use where it'll fit ..