V-FIELDうぐうぁ
うぐうぁ。肩が痛い。身を削ってコード書いてますw
なぜかまだタスクMで悩む。うーん、どうしようかどうしようか…。
V-FIELDは、ダウンロード要求を分散するようにしてみた。一番最初に起動したノードにダウンロード要求が集中する問題を解決。
具体的にはノード一覧から欲しいデータを持っているノードを探す処理を変更。
この処理はずっと要改善で解決策が浮かばないでいたところ。
今までは半分は2分検索で半分は線形検索という微妙な構成だったわけですが、もう割り切って全部線形検索で。
ただhash_mapのイテレータをくるくる回すのは結構遅いらしいので、テーブルはhash_map+listの2重構成にした。
(試してみたところ、listの方が10倍くらい速い。vectorだとさらに1.5倍くらい速いけど、vectorは間を抜いたりするとイテレータが無効になるので、hash_mapとの2重構成にするところででいろいろ問題有り)
(そういえば、2重構成の整合性を保つところが例外安全じゃない。例外安全、なんて面倒な響きなんだ)
で、検索を始める位置を毎回変えることでダウンロード要求先を分散させるという単純な話。
試してみるとキレイに分散されてなかなか面白い。
最初はメルセンヌツイスターで乱数を取って位置を変えていたのだけど、途中で 位置+=1 で問題ないことに気づいたw
でも毎回+1じゃあまり芸がないので、+3にしてみたw
さらにはマルチスレッドだけどロックなしで +=3。どうせ適当な数なら良いわけだしー