我编写了一些简单的客户端服务器应用程序 - 服务器接受连接,客户端发送 100m 数据然后连接关闭。
我有一台双启动机器,当应用程序在 linux 上运行时,它的运行速度比在 windows 上快 10 倍(试过 7 和 xp)
这是为什么?
顺便说一句,用 perl 编写的等效代码在两个操作系统上运行相同(在 linux 上比 java 慢 6 倍,但在 windows 上比 java 快得多)
编辑 这是一个小代码示例
private static void runServer() throws Exception {
try(ServerSocket ss = new ServerSocket(SERVER_PORT); Socket s = ss.accept()){
InputStream in = s.getInputStream();
byte[] chunk = new byte[CHUNK_SIZE];
long time = System.currentTimeMillis();
for (int i = 0; i < NUM_BYTES; i += in.read(chunk)) {
continue; //empty for!
}
System.out.println("Time: " + (System.currentTimeMillis() - time));
}
}
private static void runClient() throws Exception {
byte[] chunk = createJunk(CHUNK_SIZE);
try (Socket sock = new Socket(SERVER_IP, SERVER_PORT)) {
OutputStream out = sock.getOutputStream();
for( long toSend = CHUNK_SIZE, sent = 0;
sent < NUM_BYTES;
sent += toSend, toSend = Math.min(CHUNK_SIZE, NUM_BYTES - sent))
{
out.write(chunk, 0, (int) toSend);
}
out.flush();
}
System.out.println("Done.");
}
客户端始终从不同于服务器机器但在本地网络中的 Windows 机器运行。