Python gRPC 服务器max_workers和maximum_concurrent_rpcs的平等选项C++ g

Equvalent option for Python gRPC server max_workers and maximum_concurrent_rpcs in C++ gRPC sync server

本文关键字:选项 C++ rpcs maximum 服务器 gRPC max workers Python concurrent      更新时间:2023-10-16

这是python中的gRPC服务器:

server = grpc.server(
thread_pool=futures.ThreadPoolExecutor(max_workers=32),
maximum_concurrent_rpcs=100,
)

在 Python 中,如果服务器正在处理maximum_concurrent_rpcs请求,下一个请求将立即被拒绝。

如果max_workers小于maximum_concurrent_rpcsmax_workers处理请求的线程数如果没有空闲线程,则下一个请求将进入队列,直到线程空闲并从队列中选取要处理的请求。队列的最大大小为maximum_concurrent_rpcs

我的问题是同步服务器C++ gRPC 中的等效选项是什么?

1. 如何设置线程池大小以及如何设置队列大小以在线程池没有任何空闲线程后将额外的请求放入其中?

2. 如何设置排队请求的超时?

有一个SetMaxThreads选项,但它似乎就像max_workersmaximum_concurrent_rpcs都设置为此选项一样工作。

grpc::ResourceQuota rq;
rq.SetMaxThreads(100);
builder.SetResourceQuota(rq);

我在下面看到选项,但它们没有以我期望的方式工作。

builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 3);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MIN_POLLERS, 1);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MAX_POLLERS, 5);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::CQ_TIMEOUT_MSEC, 10000);

GRPC_ARG_MAX_CONCURRENT_STREAMS限制将及时处理的最大请求数:"http2 连接上允许的最大并发传入流数 https://github.com/grpc/grpc/blob/47a06ace92d0db299e6fa9ecc9a9d26db8d85c62/include/grpc/impl/codegen/grpc_types.h#L150。

如果出现更多请求,它们将被缓冲。缓冲区大小受资源配额(目前仅内存配额(的限制。

缓冲的请求将在达到其截止时间(由应用程序指定(时超时。