MapReduceフレームワークを使用してGoogleAppEngineで作業(この場合はMD5ブルートフォーサー)を行う実験を行っています。
開発サーバーを使用しているだけでも、GAE内でコードの実行が非常に遅いという問題があります
このコードhttps://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/mapreduce/HashMapper.javaは、1秒あたり約4,000回のハッシュのみを処理します(これは単一の内部の時間です) map()を呼び出すと、その内部で使用されるgoogle app engine apiはまったくありません)。
コードを外部に持ち出し、スタンドアロンで実行しました-https ://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/StandaloneTest.java、そのバージョンは100万を超えます毎秒。実行速度が遅いのは中央ループです。これは、そのコードのいずれもGoogleAppEngineとは関係がないため奇妙です。
Google App Engineコードでプロファイラーを実行してみましたが、有用なものは見つかりませんでした。checkRestricted()などを大量に呼び出しているようです。セキュリティマネージャを削除してみました
この単純なコードでさえ:
int i;
for (i=0; i< 1000000; i++) {
i += 2;
i += (int) Math.sin(i * (i + (int) System.currentTimeMillis()));
}
long enda = System.currentTimeMillis();
System.out.println("took " + (enda - starta) + " i:" + i);
通常のプログラムに入れると117ミリ秒で実行され、同じプロセッサの開発者モードのサーブレット内では400ミリ秒以上実行されます。
(興味深いことに、マッパーは本番のGoogle App Engineで1秒あたり約60,000のハッシュを実行します。したがって、スタンドアロンプログラムと比較すると、はるかに高速ですが、それでも非常に低速です)