1

这是 python 中的 gRPC 服务器:

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

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

如果max_workers小于maximum_concurrent_rpcs,则有max_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);
4

1 回答 1

0

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

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

当到达期限(由应用程序指定)时,缓冲的请求将超时。

于 2019-08-21T20:13:23.207 回答