code: func NewSyncPool(minSize, maxSize, factor int) *SyncPool {
  	n := 0
  	for chunkSize := minSize; chunkSize <= maxSize; chunkSize *= factor {
  		n++
  	}
  	pool := &SyncPool{
  		make([]sync.Pool, n),
  		make([]int, n),
  		minSize, maxSize,
  	}
  	n = 0
  	for chunkSize := minSize; chunkSize <= maxSize; chunkSize *= factor {
  		pool.classesSize[n] = chunkSize
  		pool.classes[n].New = func(size int) func() interface{} {
  			return func() interface{} {
  				buf := make([]byte, size)
  				return &buf
  			}
  		}(chunkSize)
  		n++
  	}
  	return pool
  }
docs: // NewSyncPool create a sync.Pool base slab allocation memory pool.
  // minSize is the smallest chunk size.
  // maxSize is the lagest chunk size.
  // factor is used to control growth of chunk size.