我正在使用
Windows Server 2008,我的程序是在C中.
我在一个while(true)循环中使用WinSock2和sendto()来发送我的数据包.
代码如下:
while(true)
{
if(c == snd->max)
c = snd->min;
dest.sin_addr.S_un.S_addr = hosts[c];
iphead->destaddr = hosts[c];
sendto(s, castpacket, pktsz, 0, castdest, szsad);
++c;
}
我需要尽可能快地将尽可能多的数据发送到我的主机std :: vector中的尽可能多的IP.
我目前正在运行i7 930服务器,而我只能达到350Mbps左右.
我目前将我的程序拆分为4个线程,所有线程都运行while循环,并为每个线程分配不同的服务器.
添加更多线程或运行更多程序副本会导致吞吐量降低.
我有另一个程序正在运行侦听来自服务器的回复.我从主列表中获取服务器并将它们添加到我的阵列中.目前的问题是,通过所有这些问题需要很长时间,我想定期检查它们.
我怎么能在这里优化我的程序/循环/发送?
最佳答案 我建议转到异步I / O以加快速度.一次发送一个的主要问题是,当TCP堆栈正在处理当前数据包时,您无法排队下一个数据包.
或者,您可以采用线程池方法:触发一定数量的工作线程,每个线程从FIFO中获取客户端并将数据发送到客户端.当线程完成其客户端时,它将客户端放回FIFO中并获取一个新客户端.您可以通过调整工作线程的数量来填充管道 – 但不要填充它.