#性能 #异步 #工具 #分析 #跟踪

async-instrumenter

这是一个针对 futures 的包装器,允许你测量 future 执行所需的时间

5 个版本

0.1.4 2023 年 8 月 17 日
0.1.3 2023 年 8 月 17 日
0.1.2 2023 年 8 月 17 日
0.1.1 2023 年 8 月 17 日
0.1.0 2023 年 8 月 17 日

#171性能分析

GPL-3.0+

15KB
91

异步工具

Crates.io

这个 Rust 库提供了一个有用的功能,允许你精确测量任何特定 future 执行所需的时间。

请注意,这仅与 Rust 的 Instant 类型一样准确。因此,虽然它提供了良好的基准测试,但它受限于 std/os/hardware 测量时间的精度。(如果您知道更精确的实现,我非常愿意听取您的意见)

使用非常简单

async fn sleep() {
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}

// debug log our `sleep()` future with a custom log message
// will only print debug log if `debug_assertions` are enabled
//
// elapsed arg must be used
dbg_instrument!("sleep() took {elapsed:?}", sleep()).await;

// same as above, except with a predefined macro provided log
// message
dbg_instrument!(sleep()).await;

// will always print a debug log message regardless of
// `debug_assertions` status
//
// elapsed arg must be used
instrument!("{elapsed:?}", sleep()).await;

// same as above, except with a predefined macro provided
// log message
instrument!(sleep()).await;

// we can also manually create an instrumenting future if
//we require custom behavior or access to the elapsed data
let res = InstrumentFuture::new(sleep()).await;
println!("took {:?} with result {:?}", res.elapsed, res.result);

依赖项

~0.3–0.8MB
~18K SLoC