1 个不稳定版本
0.1.0 | 2023年6月12日 |
---|
#1006 在 并发
每月 109 次下载
11KB
126 行
thread-broadcaster
Thread Broadcaster 是一个单通道多生产者(SPMC)库,它允许线程之间发送通知。与大多数多生产者多消费者(MPMC)实现不同,Thread Broadcaster 确保所有监听器都接收数据,而不仅仅是第一个。
🤔 功能
- 单通道多生产者(SPMC)架构
- 比 MPMC 快一点(归功于 crossbeam-channel!)
- 发送者和接收者可以被克隆并在线程之间共享。
- 简单直观的 API 用于发送和接收通知
- 线程之间的异步通知广播
- 支持
tracing
用于调试
⚡️ 快速入门
use core::time;
use std::thread;
use thread_broadcaster::{BroadcastListener, Broadcaster};
fn main() {
let (b, s) = Broadcaster::<String>::new();
let s2 = s.clone();
thread::spawn(move || {
let ls1 = BroadcastListener::register_broadcast_listener(s);
for msg in ls1.channel {
println!(
"got broadcast with data: {} on thread {:#?}",
msg,
thread::current().id()
);
}
});
thread::spawn(move || {
let ls2 = BroadcastListener::register_broadcast_listener(s2);
for msg in ls2.channel {
println!(
"got broadcast with data: {} on thread {:#?}",
msg,
thread::current().id()
);
}
});
thread::spawn(move || {
// we wait for registration
thread::sleep(time::Duration::from_secs(1));
b.broadcast("something to broadcast".to_string());
// we wait for listeners to pickup before being dropped
thread::sleep(time::Duration::from_secs(2));
})
.join()
.unwrap();
}
⬇️ 安装
cargo add thread-broadcaster
🤝 贡献
- 欢迎为任何功能或错误提交 PR/Issue。
- 确保您遵循 社区指南。
- 欢迎就 melonpan 的问题或任何讨论提出 issue。
- 有功能请求?打开 Issue!
⚖️ 许可证
版权 2022 Hemanth Krishna
在 MIT 许可证下发布 : https://opensource.org/licenses/MIT
用 ❤ 和多杯咖啡制作
依赖项
~765KB
~11K SLoC