i have gRPC sync server with one service and 1 RPC.
I am not setting ResourceQuota on serverbuilder. If n clients wants to connect, there will be n request handler threads created by gRPC. I want to keep some limit on these threads. lets say 10. And if it costs some latency in serving client, it is okay.
So I tried these settings:
grpc::ServerBuilder builder;
grpc::ResourceQuota rq;
rq.SetMaxThreads(10);
builder.SetResourceQuota(rq);
builder.SetSyncServerOption(
grpc::ServerBuilder::SyncServerOption::MIN_POLLERS, 1);
builder.SetSyncServerOption(
grpc::ServerBuilder::SyncServerOption::MAX_POLLERS, 1);
builder.SetSyncServerOption(grpc::ServerBuilder::SyncServerOption::NUM_CQS,
1);
From another process, I am firing up 800 clients in parallel. So I expect there will be 1 completion queue for each of them and 10 threads sharing it. However, on client side there is an error:
"Server Threadpool Exhausted"
and none of the client succeeds. how to share threads between different clients.