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。どうせ適当な数なら良いわけだしー