2

簡単なクライアント サーバー アプリケーションを作成しました。サーバーは接続を受け入れ、クライアントは 100m のデータを送信し、その後接続を閉じました。

私はデュアルブートマシンを持っています.Linuxでアプリケーションを実行すると、Windowsよりも10倍速く実行されました(7とXPを試しました)

何故ですか?

ところで、perl で書かれた同等のコードは、両方の OS で同じように実行されます (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