C ++ gRPC同步服务器中Python gRPC服务器max_workers和maximum_concurrent_rpcs的等效选项

时间:2019-08-18 08:40:20

标签: c++ grpc grpc-python

这是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_workers maximum_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);

1 个答案:

答案 0 :(得分:0)

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

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

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