你将不得不原谅相当大的代码块,但我相信这是对我的问题的近乎最小的再现.问题不是孤立的,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) 我有一个类Base
从我有两个类,DerivedA
并DerivedB
定义如下.
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
必须是模板化的纯虚函数,这是不可能的.请原谅我缺乏解释.
我正在以下列方式创建文件:
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
程序开发方面经验不多.正如我在标题中所描述的,如何确定返回字符指针是否需要在C标准库函数中空闲?对于例子,做我需要释放函数的返回指针getenv
在stdlib.h
和strstr
string.h中?我在文档中找不到任何描述.
提前致谢.