我使用grpc cpp示例“ helloworold”代码来测试限制句柄线程。但是我找不到任何方法。
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;
}
};
我使用示例客户端,并在100个线程中调用SayHello
,服务器日志显示该线程被创建了100次。
在此测试中,我的测试方式是否错误?还是有些东西错过了设置?
答案 0 :(得分:0)
您正在使用的是同步API,它将在每次调用时启动一个线程。您可以查看异步API以减少线程数。
答案 1 :(得分:0)
您可以通过以下方式使用SetMaxThread:
if ("production" === "production") {
// ...do production stuff
} else {
// ...do development stuff
}
似乎每个完成队列都需要一个线程。因此,当您有1个完成队列时,如果n = 4,则剩下3个线程用于处理请求。