#async-io #async #byte #io #shared-data #concurrency #command-output

streamcatcher

线程安全、共享(异步)、几乎无锁的流缓冲区

5 个版本 (2 个稳定版)

1.0.1 2021年12月27日
1.0.0 2021年8月31日
0.1.1 2021年8月31日
0.1.0 2020年9月27日
0.0.1 2020年8月17日

#354 in 异步

Download history 1000/week @ 2024-04-23 879/week @ 2024-04-30 851/week @ 2024-05-07 854/week @ 2024-05-14 901/week @ 2024-05-21 929/week @ 2024-05-28 668/week @ 2024-06-04 676/week @ 2024-06-11 873/week @ 2024-06-18 865/week @ 2024-06-25 474/week @ 2024-07-02 800/week @ 2024-07-09 1003/week @ 2024-07-16 931/week @ 2024-07-23 812/week @ 2024-07-30 994/week @ 2024-08-06

3,894 每月下载
用于 2 crate

MIT/Apache

56KB
1K SLoC

docs-badge crates.io version crates.io downloads license build badge

Streamcatcher

Streamcatcher 是一个 Rust 线程安全、共享(异步)流缓冲区,旨在仅在访问和存储新数据时加锁。

Streamcatcher 设计允许在单程流(例如,命令输出)上进行搜索,这些流的输出需要由多个线程访问,而不需要频繁的重新分配、对安全只读数据的竞争或不必要的停滞。只有读取 新数据 的线程需要锁定数据结构,并且不会阻止较早的读取操作。

特性

  • 无锁访问预读数据和完成后的流。
  • 对新读取数据的透明缓存。
  • 允许对只读字节数据流进行搜索。
  • 分块分配以减少复制并支持未知输入长度。
  • 通过复制到单个后端存储来可选加速流完成后的读取。
  • (有状态)字节数据流转换。
  • 通过具有 "async" 功能支持异步,并通过 ["async-std-compat"], "smol-compat", "tokio-compat"] 运行时。

主要算法在 这篇博客文章 中概述,绳引用跟踪已移至核心。

许可证

根据以下任一许可证授权:

任选其一。

贡献

除非你明确声明,否则根据 Apache-2.0 许可证定义,你提交的任何有意包含在作品中的贡献都应双重授权如上所述,无需任何附加条款或条件。

详细指南请参考CONTRIBUTING 文件

依赖项

~0.6–30MB
~442K SLoC