Why would kernel threads be polling in practice? Won't most be waiting on locks, file descriptors, timers, etc?
There are also costs in setting and checking those locks etc. Sure, you can build solutions to optimise a broken model, which we've done over decades (with quite a bit of success!), but it doesn't make the model less broken.
Sure you do, there is noticable memory and ctx switching overhead(for large no. of them ofc) in stackful coroutines.