我想创建一个 C++ 服务器/客户端,以最大限度地提高本地主机上 TCP 套接字通信的吞吐量。作为准备,我使用iperf来了解 i7 MacBookPro 的最大带宽是多少。
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 256 KByte (default)
------------------------------------------------------------
[ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 51583
[ 4] 0.0-120.0 sec 329 GBytes 23.6 Gbits/sec
没有任何调整,ipref 告诉我我可以达到至少 23.2 GBit/s。然后我做了我自己的 C++ 服务器/客户端实现,你可以在这里找到完整的代码:https ://gist.github.com/1116635
在那个代码中,我基本上用每个读/写操作传输一个 1024 字节的 int 数组。所以我在服务器上的发送循环如下所示:
int n;
int x[256];
//fill int array
for (int i=0;i<256;i++)
{
x[i]=i;
}
for (int i=0;i<(4*1024*1024);i++)
{
n = write(sock,x,sizeof(x));
if (n < 0) error("ERROR writing to socket");
}
我在客户端的接收循环如下所示:
int x[256];
for (int i=0;i<(4*1024*1024);i++)
{
n = read(sockfd,x,((sizeof(int)*256)));
if (n < 0) error("ERROR reading from socket");
}
正如标题中提到的,运行它(使用 -O3 编译)会导致以下执行时间约为 3 GBit/s:
./client 127.0.0.1 1234
Elapsed time for Reading 4GigaBytes of data over socket on localhost: 9578ms
我在哪里失去带宽,我做错了什么?同样,完整的代码可以在这里看到:https ://gist.github.com/1116635
任何帮助表示赞赏!