C++ grpc同步服务器限制句柄线程

C++ grpc同步服务器限制句柄线程,c++,multithreading,grpc,C++,Multithreading,Grpc,我使用grpc cpp示例“HelloWorld”代码来测试限制句柄线程。但是我找不到任何方法来做 grpc版本:1.15 linux:ubuntu 16.04 我将生成器设置为: builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MIN_POLLERS, 1); builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MAX_POLLERS, 1); bui

我使用grpc cpp示例“HelloWorld”代码来测试限制句柄线程。但是我找不到任何方法来做

grpc版本:1.15

linux:ubuntu 16.04

我将生成器设置为:

builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MIN_POLLERS, 1);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MAX_POLLERS, 1);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 1);
class GreeterServiceImpl final : public Greeter::Service {
  Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloReply* reply) override {
    std::string prefix("Hello ");
    std::cout << "start " << std::this_thread::get_id() << std::endl;
    reply->set_message(prefix + request->name());

    //**** sleep 5s, keep this thread block ****
    std::this_thread::sleep_for(std::chrono::seconds(5));

    std::cout << "end " << std::this_thread::get_id() << std::endl;
    return Status::OK;
  }
};
如下所示设置手柄:

builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MIN_POLLERS, 1);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::MAX_POLLERS, 1);
builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 1);
class GreeterServiceImpl final : public Greeter::Service {
  Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloReply* reply) override {
    std::string prefix("Hello ");
    std::cout << "start " << std::this_thread::get_id() << std::endl;
    reply->set_message(prefix + request->name());

    //**** sleep 5s, keep this thread block ****
    std::this_thread::sleep_for(std::chrono::seconds(5));

    std::cout << "end " << std::this_thread::get_id() << std::endl;
    return Status::OK;
  }
};
class GreeterServiceImpl final:公共问候者::服务{
状态SayHello(ServerContext*context,const HelloRequest*request,
HelloReply*回复)覆盖{
字符串前缀(“Hello”);

std::cout您正在使用的是sync API,它将在每次调用时启动一个线程。您可以查看异步API以减少线程数。

您可以通过以下方式使用SetMaxThread:

grpc::ResourceQuota rq;
rq.SetMaxThreads(n);
builder.SetResourceQuota(rq);
似乎每个完成队列都需要一个线程,所以当您有一个完成队列时,如果n=4,则剩下3个线程用于处理请求