Many people claim that asyncio should be used for I/O-intensive tasks. However, this might not actually be the case. I wrote a simple benchmark and observed that for I/O-intensive tasks, the performance of asyncio and multithreading is quite similar. In fact, I believe that asyncio might only be necessary when dealing with very complex state sharing and contention. Otherwise, if using asyncio significantly affects the coding style, it’s best to avoid it.