我的grpc服务器是在VC++中,传输1千兆点(1e9)的数据-其中每个点是1、2、4或8字节的数据,具体取决于所选的精度。我有03个客户机--每种语言都有一个-- Cpp-14、Python-3.9和C# (.net 5.0)。C++使用grpc vc包,Python使用pip包,C#使用nuget包。我的电脑有10G的以太网卡。
在单线程中-应用程序的最大速度为Cpp: 4.5Gbps,C#:2.5Gbps,Python: 9Gbps。为什么python比C++快2倍,比C#快近4倍?
下面是我的代码(仅限主要摘录):
Proto文件:
service data {
rpc get (Request) returns (stream Response) {}
}
message Request {
string source = 1;
uint64 chunksize = 2;
}
message Response {
bytes data = 1;
}Python代码:
def get_data():
index_dict: dict() = {1:'b', 2:'h', 4:'i', 8:'d'}
data = []
request = ABC.Request()
stub = ABC._pb2_grpc.dataStub(self._channel)
response_iterator = stub.get(request)
for response in response_iterator:
data += struct.unpack("2500h", response.data)
return dataC#代码:
using var call = _data.get(request);
var responseStream = call.ResponseStream;
while (await responseStream.MoveNext())
{
var data = responseStream.Current.Data;
ReceivedData.Append(data);
}C++代码:
std::unique_ptr<grpc::ClientReader<Response>> reader = stubdata_->get(&context, request);
while (reader->Read(&reply))
{
src += reply.chunk().data_size();
}发布于 2021-09-22 17:57:57
由于gRPC Python和gRPC C++使用相同的gRPC核心来执行实际工作,因此在这个简单的例子中,它们应该具有类似的性能。您是否检查过您正在使用发布配置构建gRPC C++?(调试构建速度要慢得多)
https://stackoverflow.com/questions/69221188
复制相似问题