【发布时间】:2016-09-21 19:15:51
【问题描述】:
我需要在单线程应用程序中使用 gRPC(带有额外的套接字通道)。天真地,我正在考虑使用 select() 并根据弹出的文件描述符调用 gRPC 来处理消息。我的问题是,谁能给我一个粗略的(5-10 行代码)大纲框架,说明在 select() 弹出后我需要调用什么?
在同步情况下查看 Google 的“hello world”示例意味着线程池(我不能使用),而在异步情况下显示主循环阻塞——这对我不起作用,因为我需要处理其他套接字操作。
【问题讨论】:
-
任何使用
select()的教程都应该展示它的基本用法。 -
其实 select() 不是问题(我知道怎么用)——问题是我在 gRPC 中调用哪些函数来“处理”弹出的文件描述符,并保证gRPC 不会阻止等待更多数据。
-
这可能是不可能的。许多 RPC 库提供的高级方法可能不允许您将 I/O 和函数调用步骤分开。
-
嗨,Barmar,你是对的。根据gRPC discussion group,我正在尝试做的事情无法完成。 :-(
-
有点旁白,但是 select() 是邪恶的,你应该(几乎)永远不要调用它,因为 poll() 非常便携,如果你有太多 FD 不会随机爆炸你的过程。一个例外是如果您需要 pselect() - 遗憾的是, ppoll() 不是很便携。