小编dru*_*nly的帖子

在多线程环境中使用libcurl会导致与DNS查找相关的非常慢的性能

你将不得不原谅相当大的代码块,但我相信这是对我的问题的近乎最小的再现.问题不是孤立的,example.com而是持续存在于许多其他网站上.

如果我有4个线程主动发出网络请求,curl工作100%罚款.

如果我再添加一个线程,该线程需要大约10倍的时间来执行.我觉得我必须错过一些明显的东西,但它现在逃脱了我.

更新更多信息:这些测试位于虚拟机中.与机器可用的内核数量无关,其中四个请求需要大约100毫秒,其余请求大约需要5500毫秒.

更新2:实际上,我在一个方面是错的,它并不总是4/ n-4分布 - 当我改为4核心时,有时我得到一个不同的结果分布(在1核上运行至少看起来相对一致) - 这里是一个当线程在4核VM上运行时返回其延迟(ms)而不是其http代码时的结果片段:

   191  191
   198  198  167
   209  208  202  208
   215  207  214  209  209
  5650  213 5649  222  193  207
   206  201  164  205  201  201  205
  5679 5678 5666 5678  216  173  205  175
  5691  212  179  206 5685 5688  211 5691 5680
  5681  199  210 5678 5663  213 5679  212 5666  428
Run Code Online (Sandbox Code Playgroud)

更新3:我从头开始构建curl和openssl,删除锁定(因为openssl 1.1.0g不需要它)并且问题仍然存在.(通过以下方式进行的完整性检查/验证):

std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading virtual-machine libcurl futex

15
推荐指数
1
解决办法
861
查看次数

C++中奇怪重复模板模式(CRTP)的多态集合?

我有一个类Base从我有两个类,DerivedADerivedB定义如下.

template <typename Derived>
class Base{
public:
    double interface(){
        static_cast<Derived*>(this)->implementation();
    }
};

class DerivedA : public Base<DerivedA>{
public:
    double implementation(){ return 2.0;}
};

class DerivedB : public Base<DerivedB>{
public:
    double implementation(){ return 1.0;}
};
Run Code Online (Sandbox Code Playgroud)

简而言之,我正在尝试执行以下操作来维护对象集合,其中一些对象是,其中DerivedA一些是DerivedB:

std::vector<std::shared_ptr<Derived>>
Run Code Online (Sandbox Code Playgroud)

这显然是不可能的,因为我现在已经把这个课程Derived变成了模板课.

有什么办法可以创建/维护多态的对象集合吗?

编辑:不幸的是,一个简单的模板结构不起作用,因为函数implementation在我的实际程序中被模板化 - 所以那时implementation必须是模板化的纯虚函数,这是不可能的.请原谅我缺乏解释.

c++ polymorphism inheritance crtp c++11

1
推荐指数
2
解决办法
2865
查看次数

写入文件,给出错误的名称

我正在以下列方式创建文件:

if ((BmpFile = CreateFile((LPCWSTR)"Test.bmp",
                          GENERIC_WRITE,
                          0, NULL,
                          CREATE_ALWAYS,
                          FILE_ATTRIBUTE_NORMAL,
                          NULL)) == INVALID_HANDLE_VALUE)
Run Code Online (Sandbox Code Playgroud)

但是创建的文件名称敔瑳戮灭.

显然不是我想要的!我正在尝试学习Windows API,任何人都可以告诉我我必须改变什么才能让它输出我认为应该的东西?我看过http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx并没有太多帮助我 - 我想因为我不知道我在找什么.

过早编辑:其他一切在函数中按预期工作.

c++ windows winapi

0
推荐指数
1
解决办法
44
查看次数

如何确定返回字符指针是否需要在C标准库函数中空闲?

我在C程序开发方面经验不多.正如我在标题中所描述的,如何确定返回字符指针是否需要在C标准库函数中空闲?对于例子,做我需要释放函数的返回指针getenvstdlib.hstrstrstring.h中?我在文档中找不到任何描述.

提前致谢.

c free pointers c-standard-library

-2
推荐指数
1
解决办法
989
查看次数