fn spsc_benches()

in quic/s2n-quic-bench/src/sync.rs [12:80]


fn spsc_benches(c: &mut Criterion) {
    let mut group = c.benchmark_group("spsc");

    for i in [1, 64, 1024, 4096] {
        group.throughput(Throughput::Elements(i as _));
        group.bench_with_input(BenchmarkId::new("s2n/send_recv", i), &i, |b, input| {
            let (mut sender, mut receiver) = spsc::channel(*input);
            b.iter(|| {
                {
                    let mut slice = sender.try_slice().unwrap().unwrap();
                    while slice.push(123usize).is_ok() {}
                }

                {
                    let mut slice = receiver.try_slice().unwrap().unwrap();
                    while slice.pop().is_some() {}
                }
            });
        });
        group.bench_with_input(
            BenchmarkId::new("crossbeam/send_recv", i),
            &i,
            |b, input| {
                let (sender, receiver) = bounded(*input);
                b.iter(|| {
                    {
                        while sender.try_send(123usize).is_ok() {}
                    }

                    {
                        while receiver.try_recv().is_ok() {}
                    }
                });
            },
        );

        group.bench_with_input(BenchmarkId::new("s2n/send_recv_iter", i), &i, |b, input| {
            let (mut sender, mut receiver) = spsc::channel(*input);
            b.iter(|| {
                {
                    let mut slice = sender.try_slice().unwrap().unwrap();
                    let _ = slice.extend(&mut core::iter::repeat(123usize));
                }

                {
                    let mut slice = receiver.try_slice().unwrap().unwrap();
                    slice.clear();
                }
            });
        });
        group.bench_with_input(
            BenchmarkId::new("crossbeam/send_recv_iter", i),
            &i,
            |b, input| {
                let (sender, receiver) = bounded(*input);
                b.iter(|| {
                    {
                        while sender.try_send(123usize).is_ok() {}
                    }

                    {
                        for _ in receiver.try_iter() {}
                    }
                });
            },
        );
    }
    group.finish();
}