示例#1
0
func benchmarkUsing(b *testing.B, pool FramePool) {
	const numGoroutines = 1000
	const maxHoldFrames = 1000

	var gotFrames atomic.Uint64

	var wg sync.WaitGroup
	for i := 0; i < numGoroutines; i++ {
		wg.Add(1)
		go func() {

			for {
				if gotFrames.Load() > uint64(b.N) {
					break
				}

				framesToHold := rand.Intn(maxHoldFrames)
				gotFrames.Add(uint64(framesToHold))

				frames := make([]*Frame, framesToHold)
				for i := 0; i < framesToHold; i++ {
					frames[i] = pool.Get()
				}

				for i := 0; i < framesToHold; i++ {
					pool.Release(frames[i])
				}
			}

			wg.Done()
		}()
	}

	wg.Wait()
}