This PR takes the core idea behind #165 (reducing the number of task creation/cancellation) but:
splits the changes on the sender and receiver side into separate commits
the worker tasks sleep even longer than in #165 further reducing useless work
Things to note, I did rebase #165 over the latest master and with python 3.9, the performance improvements isn't as drastic as noted back in the previous PR. I'm assuming upstream python people did improve asyncio quite a bit. Still, there's still a ~10% improvement win with either PR which is nice.
This PR takes the core idea behind #165 (reducing the number of task creation/cancellation) but:
Things to note, I did rebase #165 over the latest master and with python 3.9, the performance improvements isn't as drastic as noted back in the previous PR. I'm assuming upstream python people did improve asyncio quite a bit. Still, there's still a ~10% improvement win with either PR which is nice.