gpt4 book ai didi

java - 电脑socket的速度是120MB/s,正常吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:46 25 4
gpt4 key购买 nike

我在单台电脑上测试了一个程序通过socket向另一个程序传输数据的性能,速度是120MBytes/s,是否正常?

我的服务器和客户端程序都非常简单。

我的电脑是 AMD Athlon X2 4000+,4G DDR2 667 内存,windows xp sp3。

friend 说慢,应该快点。但我不知道如何改进它们,或者是否有任何其他库可以尝试获得更快的速度?

更新

服务器和客户端程序都在我自己的电脑上,一台电脑网卡会不会限速?


服务器.java

import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(6666);
Socket socket = server.accept();
OutputStream output = socket.getOutputStream();

byte[] bytes = new byte[10 * 1024]; // 10K
for (int i = 0; i < bytes.length; i++) { bytes[i] = 12; } // fill the bytes

// send them again and again
while (true) {
output.write(bytes);
}
}
}

客户端.java

public class SimpleClient {

public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 6666);
InputStream input = socket.getInputStream();
long total = 0;
long start = System.currentTimeMillis();

byte[] bytes = new byte[10240]; // 10K

// read the data again and again
while (true) {
int read = input.read(bytes);
total += read;
long cost = System.currentTimeMillis() - start;
if (cost > 0 && System.currentTimeMillis() % 1000 == 0) {
System.out.println("Read " + total + " bytes, speed: " + (total / (1024.0*1024)) / (cost / 1000.0) + " MB/s");
}
}
}

}

最佳答案

你能给我这个程序的输出吗?

public class SimpleServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(6666);
Socket socket = server.accept();
OutputStream output = socket.getOutputStream();

byte[] bytes = new byte[32*1024]; // 32K
while (true) {
output.write(bytes);
}
}
}
public class SimpleClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 6666);
InputStream input = socket.getInputStream();
long total = 0;
long start = System.currentTimeMillis();

byte[] bytes = new byte[32*1024]; // 32K
for(int i=1;;i++) {
int read = input.read(bytes);
if (read < 0) break;
total += read;
if (i % 500000 == 0) {
long cost = System.currentTimeMillis() - start;
System.out.printf("Read %,d bytes, speed: %,d MB/s%n", total, total/cost/1000);
}
}
}
}

在我的机器上打印

Read 25,586,204,672 bytes, speed: 5,245 MB/s
Read 53,219,426,304 bytes, speed: 5,317 MB/s
Read 85,018,968,064 bytes, speed: 5,416 MB/s
Read 117,786,968,064 bytes, speed: 5,476 MB/s

尝试多次发送 32K block (至少 2 秒),你应该得到 400 MB/s 或更多。例如至少 10,000 次。

在速度非常快的机器上,您可以在单个客户端上获得 1 GB/s 的速度。对于多个客户端,您可能会获得 8 GB/s。

举个例子

Making file transfer more efficient Java


如果您有一张 100 Mb 的卡,您可以预期大约 11 MB/s(每秒字节数)。

类似地,对于 1 Gb 以太网,您预计大约为 110 MB/s

对于 10 Gig-E 以太网,您可能会获得高达 1 GB/s 的速度,但是除非您的系统经过高度调整,否则您可能只会获得这个速度的一半。

关于java - 电脑socket的速度是120MB/s,正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com