C++ 为什么我的线程节约电话慢?
我对节俭的定义如下:C++ 为什么我的线程节约电话慢?,c++,thrift,C++,Thrift,我对节俭的定义如下: list<i32> getValues() list getValues() 用C++实现。< /P> Server.cpp具有以下代码: std::向量存储; TransferServiceHandler(){ 对于(int i=0;i,在我看来,您正在失去分辨率: clock_gettime(CLOCK_REALTIME, &ds_spec); int64_t dstarted = ds_spec.tv_sec * 1000 + (ds_s
list<i32> getValues()
list getValues()
用C++实现。< /P> Server.cpp具有以下代码:
std::向量存储;
TransferServiceHandler(){
对于(int i=0;i,在我看来,您正在失去分辨率:
clock_gettime(CLOCK_REALTIME, &ds_spec);
int64_t dstarted = ds_spec.tv_sec * 1000 + (ds_spec.tv_nsec / 1.0e6);
这与使用clock_gettime()
作为开头的原因背道而驰;
是一个关于如何使用clock_gettime()评测代码的链接;希望它能解决您的问题
我指的是分辨率,因为这可能是导致意外分析结果的一个很好的原因。在将数据作为二进制而不是矢量传输后,我在性能上取得了显著的改进
在节俭定义文件中,将列表更改为二进制
以下是相同数据量的新基准:
我不确定我是否完全理解客户端和服务器之间的交互,但是您的getValue
方法可以通过使用移动语义(C++11)进行改进,因此您可以移动存储
向量,而不是制作副本(内存操作非常昂贵),如下所示:
void getValues(std::vector<int32_t> & _return) {
// Your implementation goes here
_return = std::move(store);
}
void getValues(std::vector&\u return){
//你的实现就在这里
_返回=标准::移动(存储);
}
请注意,只要存储
的内容(现在已移动到_return)中,此功能就可以正常工作不需要在调用getValue
之后继续运行,您没有显示任何代码,您没有告诉我们您的程序正在做什么,您正在测量什么,因此您认为我们应该如何帮助您?哦,感谢您的反馈,我已经编辑了问题并添加了一个示例代码库,可以重现延迟问题。请发布相关的cod在这里,不要链接到其他地方,让链接随着时间的推移变得无效。您需要进行网络跟踪,可能是TCP问题(从一开始流量就不是最大速度)。另外:可能您看到的是建立连接需要一些时间,并且您不仅在测量传输,而且在建立连接加传输(因此传输更多时数据传输率更好);请记住,5-100 MB的流量不是很大。顺便说一句,您可以为std::vector store;
保留内存,以避免重新分配。这无助于匹配,问题在于节俭序列化和反序列化数据。请看我自己的答案,当我传输二进制文件(byteBuffer)时,性能刚刚开始.这是你问题的完整解决方案吗?到目前为止,是的,我想不出更好的办法了。
clock_gettime(CLOCK_REALTIME, &ds_spec);
int64_t dstarted = ds_spec.tv_sec * 1000 + (ds_spec.tv_nsec / 1.0e6);
void getValues(std::vector<int32_t> & _return) {
// Your implementation goes here
_return = std::move(store);
}