Creating callbacks alone is not expensive, this can be backed by benchmarks. It can lead to performance impacts, such as memory leaks, over-connecting, embedded expensive code, etc.
Generally, using events instead of loops is considered more efficient on memory, but not always.
It’s best not to avoid threads as that can lead you down the wrong road in terms of optimization. It’s not the threads themselves, but rather, what you do with them.
In addition, connections are not threads, they are psuedo-threads, so it does work a little bit differently behind the scenes.
This sentence peaked my interest
Where did you find this information?