我的客户端/服务器程序在Win7上比在Ubuntu 16.04上运行慢得多。 在调查它的过程中,我将其缩小为两个winsock2调用循环的简单代码 - socket()&关闭套接字():
int counter = 0;
while (1)
{
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("socket() failed!\n");
break;
}
closesocket(sock); // close(sock); on Linux
counter++;
if (counter % 100000 == 0)
{
... // statistic calculation using GetSystemTimeAsFileTime() / clock_gettime() on Linux
}
}
每100,000次迭代我打印“迭代次数/秒”统计数据。 在Win7上,我获得 ~64.000 次迭代/秒,在Ubuntu ~760.000 迭代/秒。
Win7 Professional,64位,i7-860 @ 2.8 GHz。 Ubuntu 16.04,64位,i7-2800 @ 3.4 GHz。
Win32和x64版本提供了相同的数字,调试版本和发布版本(针对速度进行了优化)版本在Win7和Linux之间存在x10差异。
iPerf(iPerf -N -4 -c 127.0.0.1 / iPerf -s)在Win7上显示 3.6 GBit / sec,在Ubuntu上显示 76 GBit / sec!< / p>
winock2表现如此糟糕的原因是什么? 我很乐意实时测试任何建议UTC +2:00:)