Green threading. Threads are scheduled to run (for e.g by the VM) on the same hardware thread (so not in a truly parallel manner then) and are swapped whenever you yield, this makes it look like multiple threads are in use. On another note Actor objects can be used for parallel execution but I advise reading the official thread to know more about the implementation.
For extra information Lua is single threaded but the engine is multi-threaded (read more on the second linked thread). Also when calling spawn you need to wait for an open slot in the scheduler since there’s an initial delay, not the same for coroutines.
[spoiler]Edit: just so you know the post ahead must refer to something else in this thread as misinformation because this couldn’t possibly be factually incorrect; this information is verified by the research that was put in. Pity FilteredStudio didn’t bother to address anything to potentially help clarify than lazily point out misinformation.[/spoiler]