grpc - ServerAsyncReaderWriter.Write 不是执行 tcp_write 的异步
问题描述
grpc 版本 1.26.0
语言:c++
操作系统:centos 7
作为异步双向流服务器,我希望 ServerAsyncReaderWriter::Write 是异步的,实际工作(例如 tcp_write/flush)将主要在后台完成(可能是默认执行程序)。
但实际上perf(perf record -F 99 -p xx -g -- sleep 90) 显示ServerAsyncReaderWriter::Write 直接调用tcp_write,默认执行器几乎一直处于空闲状态。
沿着 ServerAsyncReaderWriter::Write -> Call::PerformOps -> Server::PerformOpsOnCall -> CallOpSet::FillOps -> grpc_call_start_batch -> ~ExecCtx -> ExecCtx::Flush -> grpc_combiner_continue_exec_ctx 往下走,我没有找到任何给别人工作的机会...
这是设计使然,还是有什么问题?
解决方案
这看起来按预期工作。gRPC C++ 尝试尽可能多地使用给定的线程。它仅在必要时才使用其他线程。
推荐阅读
- python - 如何为 seaborn catplot 的每个子图自定义文本刻度标签
- javascript - 如何编写自己的 Math.pow 函数?
- javascript - 如何仅从最后一个请求中接收价值?
- android - 验证 PDF 是否已下载并使用 Espresso 显示给用户
- java - 单击 Java Web 应用程序中的菜单时出现错误“无效的用户会话”
- flutter - 如何使用颤振设计下面的用户界面,如下图所示
- html - 无限循环 ik Keycloack 页面
- python - OpenCV 摄像头流适用于 Anaconda/Spyder,但不适用于 VS Code(“无响应”窗口)。他们有什么建议吗?
- javascript - 反应路由。在不同页面上定位组件
- azure-devops - 从命令行使用 Azure 查询