首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python中的Grpc客户端比c#和c++客户端要快?

为什么python中的Grpc客户端比c#和c++客户端要快?
EN

Stack Overflow用户
提问于 2021-09-17 09:42:46
回答 1查看 194关注 0票数 0

我的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文件:

代码语言:javascript
复制
service data {
  rpc get (Request) returns (stream Response) {}
}

message Request {
 string source = 1;
 uint64 chunksize = 2;
}

message Response {
  bytes data = 1;         
}

Python代码:

代码语言:javascript
复制
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 data

C#代码:

代码语言:javascript
复制
using var call = _data.get(request);
var responseStream = call.ResponseStream;

while (await responseStream.MoveNext())
{
    var data = responseStream.Current.Data;
    ReceivedData.Append(data);
}

C++代码:

代码语言:javascript
复制
std::unique_ptr<grpc::ClientReader<Response>> reader = stubdata_->get(&context, request);
while (reader->Read(&reply)) 
{
    src += reply.chunk().data_size();
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-22 17:57:57

由于gRPC Python和gRPC C++使用相同的gRPC核心来执行实际工作,因此在这个简单的例子中,它们应该具有类似的性能。您是否检查过您正在使用发布配置构建gRPC C++?(调试构建速度要慢得多)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69221188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档