簡単なクライアント サーバー アプリケーションを作成しました。サーバーは接続を受け入れ、クライアントは 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 マシンから実行されます。