]> git.ipfire.org Git - thirdparty/wireguard-go.git/commit
device: benchmark the waitpool to compare it to the prior channels
authorJason A. Donenfeld <Jason@zx2c4.com>
Wed, 3 Feb 2021 15:54:45 +0000 (16:54 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 3 Feb 2021 15:59:29 +0000 (16:59 +0100)
commitc3bde5f59099a3b21b016bf809b83ee3de126f80
tree35167c928fd71b19d6524beb24c395a4bcefb9c2
parentfd63a233c9fedad2be4e26edbc540e11d9ea5968
device: benchmark the waitpool to compare it to the prior channels

Here is the old implementation:

    type WaitPool struct {
        c chan interface{}
    }

    func NewWaitPool(max uint32, new func() interface{}) *WaitPool {
        p := &WaitPool{c: make(chan interface{}, max)}
        for i := uint32(0); i < max; i++ {
            p.c <- new()
        }
        return p
    }

    func (p *WaitPool) Get() interface{} {
        return <- p.c
    }

    func (p *WaitPool) Put(x interface{}) {
        p.c <- x
    }

It performs worse than the new one:

    name         old time/op  new time/op  delta
    WaitPool-16  16.4µs ± 5%  15.1µs ± 3%  -7.86%  (p=0.008 n=5+5)

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
device/pools_test.go