#channel #spmc #mpmc #parallelism #single-producer #multi-threading

thread-broadcaster

一个单生产者多消费者(SPMC)广播通道,用于在线程之间广播通知

1 个不稳定版本

0.1.0 2023年6月12日

#1006并发

Download history 21/week @ 2024-04-01 102/week @ 2024-04-08 1/week @ 2024-05-06 12/week @ 2024-05-13 13/week @ 2024-05-20 22/week @ 2024-05-27 67/week @ 2024-06-03 36/week @ 2024-06-24

每月 109 次下载

MIT 许可证

11KB
126

thread-broadcaster

release GitHub License Documentation

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