#profiler #programs #time #gain #tui #insight #terminal

直觉

通过直觉了解您多线程/多组件程序的行为

4 个版本

0.2.2 2023 年 3 月 15 日
0.2.1 2023 年 1 月 17 日
0.2.0 2023 年 1 月 17 日
0.1.0 2023 年 1 月 13 日

命令行界面 中排名第 531

每月下载量 39

Apache-2.0

26KB
531 代码行

直觉:一个基于 tui-rs 的终端 UI 的超级简单的分析器。

通过直觉了解您多线程/多组件程序的行为。

Alt text

直觉是一个分析器,它测量代码块在时间上的平均迭代时间。这个块可以是一行或多行代码。此外,每个块都可以输出自己的模块化日志。

现有的分析器要么更精细/详细,要么更细粒度,但这个提供了易于使用和实用性的良好平衡。这是一个纯 Rust 库,使用终端进行 GUI,因此不需要外部库。

这个分析器特别设计用于在活动激增时快速了解多组件、多线程系统,或者在一段时间内(例如,检测由于数据结构增长或有界 mpsc 通道填满导致的某些减速)。其他像 coz 这样的分析器对于稳态系统的因果分析非常出色,但更难从更动态的系统中获得见解。

示例用法

此示例可在 examples/simple.rs 中找到。

use intuition::{construct_profiler, Dash};

construct_profiler!(MyProgramProfiler for MyProgram: part_1);
const WINDOW_SIZE: usize = 100;
const AVERAGE_HISTORY_SIZE: usize = 1000;
static PROFILER: MyProgramProfiler<WINDOW_SIZE, AVERAGE_HISTORY_SIZE> = MyProgramProfiler::new();

fn main() {
    let mut dash = Dash::from_profiler(&PROFILER);

    let handle = std::thread::spawn(|| {
        let mut i: u64 = 0;
        loop {
            // do something before iteration which you don't want to time

            // Define a block to time
            let _new_i: u64 = PROFILER.part_1.iteration(|| {
                i += 1;
                i
            });

            // do something with result which you don't want to time
        }
    });

    let dash_handle =
        std::thread::spawn(
            move || match dash.run(std::time::Duration::from_millis(50)) {
                Ok(()) => (),
                Err(e) => println!("Dashboard exited with error {e:?}"),
            },
        );
    handle.join().unwrap();
    dash_handle.join().unwrap();
}

要退出 tui/dashboard,只需按两次 q

依赖项

~3–14MB
~111K SLoC