【发布时间】:2013-12-26 04:12:29
【问题描述】:
我正在使用 C 在 CentOS 上编程。我必须从客户端向服务器发送 3,000,000 个数字,并在服务器中以尽可能短的时间打印每个数字。现在需要 32 秒,但时间最多必须是 20 秒。在服务器中打印 3,000,000 个数字需要 16 秒,所以我认为丢失的时间是因为传输。我的程序的代码片段:
服务器:
...
while(read(socket,&num,4)>0)
printf("%i ",num);
...
客户:
...
for(i=1;i<=3000000,i++)
write(clientSocket,&i,4);
...
知道如何解决这个问题吗?
谢谢。
【问题讨论】:
-
个人资料,个人资料,个人资料。在这种情况下,我可以自信地预测大部分时间将用于
printf,其余时间将用于read和write调用,但不要相信我的话。加速二进制到十进制的转换很困难,但假设这是环回或本地以太网,如果你读写 1024 字节块而不是一个 4 字节整数,数据传输时间应该至少减少一半一次。 -
以更大的块写入和读取套接字。系统调用很昂贵。看看这是否有帮助。
-
你创建了什么类型的套接字? udp 还是 tcp?
-
另外,服务器中的stdout指向什么,一些文件?
-
非常感谢大家!我已经解决了这个1000字节块的读写问题,现在是17秒,比20秒的限制还少。