Advantage of asynchronous programming using asyncio?

What is the advantage of asynchronous programming using asyncio? Or, if HA was coded with threads, what would be the disadvantage?
Very often I read of “blocking calls”, but of course when a call is blocking because it is waiting for an event, a pre-emptive multitasking scheduler would give the CPU to other programs. Normally, in the i/o libraries or in the kernel are always “await” calls which allow other programs to get the CPU. So what “await” in python is doing is normally done by the operating system automatically.