1 个不稳定版本
0.1.0 | 2024 年 6 月 1 日 |
---|
#813 在 并发
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