#面向服务 #单生产者 #多消费者 #模式 #总线 #服务 #设计模式

sod-bus

面向服务设计 - 单生产者多消费者

7 个版本

0.3.4 2024年6月26日
0.3.3 2024年6月26日
0.3.1 2023年10月15日
0.2.4 2023年7月25日
0.2.3 2023年4月20日

#2103 in Rust 模式

Download history 205/week @ 2024-06-21 34/week @ 2024-06-28 27/week @ 2024-07-05 49/week @ 2024-07-26 6/week @ 2024-08-02

55 每月下载量

MIT/Apache

63KB
1.5K SLoC

sod-bus

sod::MutService 实现与 bus::Bus 交互。

服务实现

  • BusBroadcasterbus::Bus 广播,并在操作成功之前阻塞。
  • BusTryBroadcaster 尝试向 bus::Bus 广播,并在总线缓冲区满时可以通过 sod::RetryService 重试。
  • BusReceiverbus::BusReader 接收,在接收到元素之前阻塞。
  • BusTryReceiver 尝试从 bus::BusReader 接收,并在总线为空时可以通过 sod::RetryService 重试。

示例

use sod::MutService;
use sod_bus::{BusBroadcaster, BusReceiver};

let mut broadcaster = BusBroadcaster::with_len(1024);
let mut receiver1 = broadcaster.create_receiver();
let mut receiver2 = broadcaster.create_receiver();

broadcaster.process(1).unwrap();
broadcaster.process(2).unwrap();
broadcaster.process(3).unwrap();

assert_eq!(receiver1.process(()).unwrap(), 1);
assert_eq!(receiver1.process(()).unwrap(), 2);
assert_eq!(receiver1.process(()).unwrap(), 3);

assert_eq!(receiver2.process(()).unwrap(), 1);
assert_eq!(receiver2.process(()).unwrap(), 2);
assert_eq!(receiver2.process(()).unwrap(), 3);

依赖

~0.8–6MB
~29K SLoC