The way grpc callbacks (StreamObserver) are thread-unsafe, the callbacks for the same service can only be one after the other, which can become a performance bottleneck
https://grpc.io/grpc-java/javadoc/io/grpc/stub/StreamObserver.html StreamObserver (grpc-all 1.15.1 API)<https://grpc.io/grpc-java/javadoc/io/grpc/stub/StreamObserver.html> Receives a value from the stream. Can be called many times but is never called after onError(Throwable) or onCompleted() are called.. Unary calls must invoke onNext at most once. Clients may invoke onNext at most once for server streaming calls, but may receive many onNext callbacks. grpc.io