@Anonymike I’ve done some preliminary profiling against the Java client. It’s actually far more CPU efficient (~60% of CPU time in comparison) thanks to being coroutine based - internally the Java client uses dispatchers which maybe spin-wait or something as I was surprised how slow (concurrent reads/writes over its socket) are, yet how hard it spikes the CPU.
I am aware you can very easily eat up memory though if you spam requests / received messages as, unlike the Java client, messages will be processed as fast as possible over the socket which will lead to higher instantaneous memory consumption to hold each message. There is perhaps better ways than allocating a ByteArray  per message recv. Or maybe this a feature, not a bug :)
My theory is the Java client would have this same issue as well if it were not as slow, but my test harness gives it a chance to drop a ByteArray from a previous and reuse its allocated space in the JVM heap without a system memory impact.
There is also some memory hit with synchronisation overhead of the socket. It’s not significant, could probably improve consumption 5% under heavy load, but it’s low hanging fruit.