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);
  }