1 个不稳定版本

0.1.0 2024 年 6 月 1 日

#813并发

MIT/Apache

22KB
297

malobu

MALoBu

复用原子日志缓冲区

用例

此 crate 提供了一种数据结构,能够在多个日志中强制执行全局资源限制。这是通过使用多个底层流的全局 FIFO 来实现的,根据任何时间点给定的目标总权重,基于最旧的记录从缓存中逐出。`LogBuffer` 包含一组底层日志,每个日志都有自己的读写器集合。读者订阅日志,并保证在落后时也能检索到所有推送到相应日志的事件的无缝记录。

示例

代码

use malobu::LogBuffer;

let buffer: LogBuffer<String> = LogBuffer::new();
let log = buffer.create_log();
let reader = log.subscribe_beginning();

// write two messages to the log, weighting them based on their size
log.write("hello, world!".to_owned(), 13);
log.write("message number 2!".to_owned(), 17);

// poll a record from the reader
println!("reader polled: {:?}", reader.poll());

// trim to weight=0, which will expire all records
buffer.trim(0);
println!("buffer total weight: {}", buffer.total_weight());

// reader will still poll the last record, even though it has been trimmed from the parent buffer
println!("reader polled: {:?}", reader.poll());

// no more events to poll
println!("reader polled: {:?}", reader.poll());

输出

reader polled: Some("hello, world!")
buffer total weight: 0
reader polled: Some("message number 2!")
reader polled: None

依赖

~185KB