2

我编写了一些简单的客户端服务器应用程序 - 服务器接受连接,客户端发送 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 机器运行。

4

0 回答 0