ServerAsyncReaderWriter.Write 不是执行 tcp_write 的异步
ServerAsyncReaderWriter.Write is not async which performs tcp_write
grpc 版本 1.26.0
语言:c++
os: 分os 7
作为异步 bidi 流媒体服务器,我希望 ServerAsyncReaderWriter::Write 是异步的,实际工作(比如 tcp_write/flush)将在后台 mos 完成(可能是默认设置)执行人)。
但实际上,perf(perf record -F 99 -p xx -g -- sleep 90)显示ServerAsyncReaderWriter::Write直接调用tcp_write,默认执行器是almos一直闲着
沿着 ServerAsyncReaderWriter::Write -> Call::PerformOps -> Server::PerformOpsOnCall -> CallOpSet::FillOps -> grpc_call_start_batch -> ~ExecCtx -> ExecCtx::Flush -> grpc_combiner_continue_exec_ctx, 我找不到任何机会把工作交给别人...
这是设计使然,还是出了什么问题?
这看起来像预期的那样工作。 gRPC C++ 尝试尽可能多地使用给定的线程。它仅在必要时才使用其他线程。
grpc 版本 1.26.0
语言:c++
os: 分os 7
作为异步 bidi 流媒体服务器,我希望 ServerAsyncReaderWriter::Write 是异步的,实际工作(比如 tcp_write/flush)将在后台 mos 完成(可能是默认设置)执行人)。
但实际上,perf(perf record -F 99 -p xx -g -- sleep 90)显示ServerAsyncReaderWriter::Write直接调用tcp_write,默认执行器是almos一直闲着
沿着 ServerAsyncReaderWriter::Write -> Call::PerformOps -> Server::PerformOpsOnCall -> CallOpSet::FillOps -> grpc_call_start_batch -> ~ExecCtx -> ExecCtx::Flush -> grpc_combiner_continue_exec_ctx, 我找不到任何机会把工作交给别人...
这是设计使然,还是出了什么问题?
这看起来像预期的那样工作。 gRPC C++ 尝试尽可能多地使用给定的线程。它仅在必要时才使用其他线程。