gpt4 book ai didi

c++ - 为什么我的 Threaded Thrift 调用很慢?

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:53 27 4
gpt4 key购买 nike

我的 Thrift 定义是这样的:

list<i32> getValues()

用 C++ 实现。

Server.cpp 有如下一段代码:

.....

std::vector<int32_t> store;

TransferServiceHandler() {
for(int i=0;i<100000000;i++)
store.push_back(i);
}

void getValues(std::vector<int32_t> & _return) {
// Your implementation goes here

_return = store;

}

.....

Client.cpp 有一个调用 getValues() 的简单循环:

for(int k=0;k<10;k++){

clock_gettime(CLOCK_REALTIME, &ds_spec);
int64_t dstarted = ds_spec.tv_sec * 1000 + (ds_spec.tv_nsec / 1.0e6);

std::vector<int32_t> values;
client.getValues(values);


clock_gettime(CLOCK_REALTIME, &de_spec);
int64_t dended = de_spec.tv_sec * 1000 + (de_spec.tv_nsec / 1.0e6);

std::cout << "Values size :" << values.size() << " in " << (dended - dstarted) << " ms\n";

}

连接在循环外初始化和关闭。

此调用通常会返回几十万个条目。

当没有数据时(当列表为空时),我可以看到调用在 1ms-2ms 内发生,当我改变数据时,传输中会出现不可预测的延迟。客户端和服务器都在同一台机器上运行(配备 10Gb/s 以太网,8 核和 30 GB 内存)。

您通常如何调试这种情况?我不认为问题出在网络上,因为它是一台 10 Gig 机器,而且数据大小几乎没有几 MB。

enter image description here

我用各种数据大小运行了基准测试,您可以看到每次调用的延迟都不稳定。

最佳答案

我不确定我是否完全理解客户端和服务器之间的交互,但是您的 getValue可以通过使用移动语义 (C++11) 改进方法,因此您可以移动 store vector 而不是复制(内存操作非常昂贵)如下:

  void getValues(std::vector<int32_t> & _return) {
// Your implementation goes here
_return = std::move(store);
}

请注意,只要 store 的内容正常,这就可以正常工作(现在已移入 _return)不需要在调用 getValue 之后继续存在.

关于c++ - 为什么我的 Threaded Thrift 调用很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com