#queue #wait-free #lock-free

queuecheck

一个线程安全的队列测试和基准测试库

2个版本

使用旧的Rust 2015

0.1.1 2018年8月17日
0.1.0 2017年3月25日

#180性能分析


2 crates 使用

Apache-2.0

18KB
189

queuecheck

crates.io docs.rs Travis CI

一个线程安全的队列测试和基准测试库。

支持稳定、beta和nightly Rust渠道。

在Apache License 2.0下发布。

示例

测试

以下测试了标准库中的无界MPMC队列,通过两个生产者线程产生100,000个项目,然后由一个消费者线程消费。

use std::sync::mpsc::{self, Receiver, Sender};

let (producer, consumer) = mpsc::channel();

queuecheck_test!(
    // enqueue/dequeue operation pairs
    100_000,
    // producer threads
    vec![producer.clone(), producer],
    // consumer threads
    vec![consumer],
    // produce operation
    |p: &Sender<String>, i: String| p.send(i).unwrap(),
    // consume operation
    |c: &Receiver<String>| c.try_recv().ok()
);

基准测试

延迟

以下基准测试了标准库中无界MPMC队列的延迟,通过两个生产者线程产生100,000个项目,然后由一个消费者线程消费。

use std::sync::mpsc::{self, Receiver, Sender};

let (producer, consumer) = mpsc::channel();

let latency = queuecheck_bench_latency!(
    // warmup and measurement enqueue/dequeue operation pairs
    (1_000, 100_000),
    // producer threads
    vec![producer.clone(), producer],
    // consumer threads
    vec![consumer],
    // produce operation
    |p: &Sender<i32>, i: i32| p.send(i).unwrap(),
    // consume operation
    |c: &Receiver<i32>| c.try_recv().ok()
);

latency.report("mpmc", &[50.0, 70.0, 90.0, 95.0, 99.09]);

吞吐量

以下基准测试了标准库中无界MPMC队列的吞吐量,通过两个生产者线程产生100,000个项目,然后由一个消费者线程消费。

use std::sync::mpsc::{self, Receiver, Sender};

let (producer, consumer) = mpsc::channel();

let ops = queuecheck_bench_throughput!(
    // warmup and measurement enqueue/dequeue operation pairs
    (1_000, 100_000),
    // producer threads
    vec![producer.clone(), producer],
    // consumer threads
    vec![consumer],
    // produce operation
    |p: &Sender<i32>, i: i32| p.send(i).unwrap(),
    // consume operation
    |c: &Receiver<i32>| c.try_recv().ok()
);

println!("{:.3} operation/second", ops);

无运行时依赖