【寒江雪】Go実現対象プールモード


Object Pool Pattern
  対象プールモードは、必要に応じて使用する対象を予測し、事前に作成し、メモリに保存するタイプです。
実現する
オブジェクトプールの定義
package pool

import (
    "fmt"
    "strconv"
)

type Object struct{

}

func (Object)Do(index int){
    fmt.Println("Object Do:"+strconv.Itoa(index))
}


type Pool chan *Object

func NewPool(total int)*Pool{
    p := make(Pool,total)
    for i := 0;inew(Object)
    }
    return &p
}
使用
func main(){
    p := pool.NewPool(5)
    wait := sync.WaitGroup{}
    for i:=0;i<100;i++ {
        index := i
        wait.Add(1)
        go func(pool pool.Pool, ind int) {
            select {
            case Obj := default:
                fmt.Println("No Object:"+strconv.Itoa(ind))
            }
            wait.Done()
        }(*p, index)
    }
    wait.Wait()
}
ここではgoroutinesを使って、poolのオブジェクトを同時に読み込みます。
注意
  • 作成対象の価格がメンテナンス価格より高い場合、使用対象プールモードは素晴らしい。
  • 需要が相対的に固定されている場合、維持対象の価格は
  • を失う可能性がある。
  • 初期化対象は、パフォーマンスに積極的な影響を与える。
    Author:寒江雪
    Date:2018年03 10