ddddddO/gtree

枝を形成するところgoroutine化できないか

ddddddO opened this issue · 1 comments

以下でgoroutineを使えれば、かなり早くなるのではないかと推測
推測なので計測しないとかもだけど、手間なら実施前後で速度に差が出るか確認するでいい

if err := dg.assembleBranch(current); err != nil {
return err
}

この処理時点では既に木としての構造はできてるはずで、currentの処理は、他のnodeへの副作用はなさそうだし、他のnodeのこの処理が終わってないとできない、ということも無さそうなので、goroutine化は可能そうに思う

実際にやるならgoroutineのlimitは設ける
race conditionは起こりうるかな

あーでも、↑が遅さの原因ではなさそう

func (dgs *defaultGrowSpreaderSimple) growAndSpread(w io.Writer, roots []*Node) error {

が使われるはずなので、木を作るとこが時間かかってるみたい
難しい

たぶん、Addメソッド内のfindで時間かかってる
mapは順序保証されてないから、findだけmap使って、出力はslice使う、という感じがいいかも
でもどうかなぁ