首页 > 解决方案 > 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 往下走,我没有找到任何给别人工作的机会...

这是设计使然,还是有什么问题?

ServerAsyncReaderWriter::Write 的火焰图

标签: grpc

解决方案


这看起来按预期工作。gRPC C++ 尝试尽可能多地使用给定的线程。它仅在必要时才使用其他线程。


推荐阅读