ギャー! やってしまった orz。16日の日記掲載のプログラムはバグっていた。java.util の新しい方のコレクションクラスは synchronized じゃないのを思い出し、どのくらい影響があったか task.log からノードの重複を除いて計数したところ、相当な数のノードがダブっていたもよう。
以下の通り訂正。実行時間やグラフ形状がどう変化するかはまだ不明。
16日の日記の実験結果ノード数
誤: 389,288 → 正: 200,036
17日の日記の実験結果1つ目のノード数
誤: 388,994 → 正: 201,619
17日の日記の実験結果2つ目のノード数
誤: 343,001 → 正: 199,316
17日の日記の実験結果3つ目のノード数
誤: 581,856 → 正: 224,453
この結果はネットエージェント7月3日発表のノード数よりかなり少ない。うむむ。
16日の日記のプログラムの訂正:
誤:
Set<Node> foundNodes = new HashSet<Node>();正:
Set<Node> foundNodes = java.util.Collections.synchronizedSet(new HashSet<Node>());
ギャー、ここも杜撰だった。(モニタリング用のコードとはいえ。)
int connectionTriedCount = 0;
int handshakeSucceededCount = 0;
int extractionSucceededCount = 0;
connectionTriedCount++;
handshakeSucceededCount++;
extractionSucceededCount++;
java.util.concurrent.atomic.AtomicInteger を使ってみよう。
import java.util.concurrent.atomic.AtomicInteger;
...
AtomicInteger connectionTriedCount = new AtomicInteger(0);
AtomicInteger handshakeSucceededCount = new AtomicInteger(0);
AtomicInteger extractionSucceededCount = new AtomicInteger(0);
...
connectionTriedCount.getAndIncrement();
handshakeSucceededCount.getAndIncrement();
extractionSucceededCount.getAndIncrement();