socket编程问题# Unix - 噫吁兮,危乎高哉
g*n
1 楼
我想测试一下用UDP的SENDTO 最快能够以多大速率发送数据。用了下面的程序:
for(i=0;i sendto(..........);
问题是,当LOOPCOUNT是比较小的数(1000)时,程序能够很快 结束。但是当LOOPCOUNT比
较大时, 程序需要的时间极长极长。应该不是合理的情况。
我作了一点改动,
for(i=0;i {
sendto(..........);
printf(""); //add some delay
}
在这种情况下程序能够较快的结束。
为什么会有这种情况发生?
不应该是collision of Ethernet,因为LOOPCOUNT=1000时碰撞也可能发生。
有没有这种可能,系统内部有缓冲区,
快速发送时,来不及从网卡上发走的数据存在缓冲区。
如果LOOPCOUNT比较小的话, 缓冲区能够容纳;
如果LOOPCOUNT很大, 在某个时刻缓冲区溢出,导致速度下降。
如果加上DELAY, 则可以保证缓冲区不会溢出。
请各位大侠指教。
for(i=0;i
问题是,当LOOPCOUNT是比较小的数(1000)时,程序能够很快 结束。但是当LOOPCOUNT比
较大时, 程序需要的时间极长极长。应该不是合理的情况。
我作了一点改动,
for(i=0;i
sendto(..........);
printf(""); //add some delay
}
在这种情况下程序能够较快的结束。
为什么会有这种情况发生?
不应该是collision of Ethernet,因为LOOPCOUNT=1000时碰撞也可能发生。
有没有这种可能,系统内部有缓冲区,
快速发送时,来不及从网卡上发走的数据存在缓冲区。
如果LOOPCOUNT比较小的话, 缓冲区能够容纳;
如果LOOPCOUNT很大, 在某个时刻缓冲区溢出,导致速度下降。
如果加上DELAY, 则可以保证缓冲区不会溢出。
请各位大侠指教。