grpc异步服务器与同步服务器文件打开过多错误

时间:2019-09-20 00:52:08

标签: c++ grpc

在使用helloworld示例时,我将greeter_async_client2.cc中的主循环更改为进行100万次迭代:

for (int i = 0; i < 1000000; i++) {
    std::string user("world " + std::to_string(i));
    greeter.SayHello(user); // The actual RPC call!
  }

然后我运行了greeter_server,并对其进行了修改,greeter_async_client2得到了以下错误:

Completion queue pluck failed: {"created":"@1568863204.491369000","description":"Too many open files","errno":24,"file":"src/core/lib/iomgr/wakeup_fd_pipe.cc","file_line":41,"os_error":"Too many open files","syscall":"pipe"}

但是使用greeter_async_server时没有错误。为什么?为什么异步版本不会打开太多文件,而同步版本却打开太多文件? 同步版本是否有可能像异步版本一样工作,还是我必须先使用异步版本,然后在操作请求时使用互斥锁来锁定我的数据结构? (我希望我的服务器能够按接收顺序处理请求,并且每个请求都将修改相同的数据结构,这就是为什么我使用同步服务器。但是,如果异步服务器也可以这样做,请让我知道)。

0 个答案:

没有答案
相关问题