#channel #multi-consumer #fifo-queue

shared_channel

多生产者、多消费者 FIFO 队列通信原语

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018 年 10 月 29 日
0.1.0 2018 年 10 月 28 日

758并发

MIT 许可证

18KB
469

shared channel

这是 Rust 中多生产者、多消费者通道的实现。

示例

简单使用

use std::thread;

extern crate shared_channel;
use shared_channel::shared_channel;

fn main() {
    let (tx, rx) = shared_channel();
    for i in 0..10 {
        let rx = rx.clone();
        thread::spawn(move || println!("{}", rx.recv().unwrap()));
    }
    for i in 0..10 {
        tx.send(i).unwrap();
    }
}

预分叉的 Web 服务器

git clone https://github.com/hinohi/rust_shared_channel.git
cd rust_shared_channel
cargo run --example hello_server

请访问 https://127.0.0.1:5000。其响应看起来像 Hello! I'm No.0。数字显示线程池工作线程的 ID。

待办事项

  • 实现 Reciver 的稳定 API
    • try_recv
    • recv
    • recv_timeout
    • iter
    • try_iter
  • 实现 shared_sync_channel

lib.rs:

多生产者、多消费者 FIFO 队列通信原语。

此模块是 std::sync::mpsc 的扩展,几乎具有相同的 API。区别在于:

  • 定义了一个结构体 SharedReceiver。这是一个可克隆的结构体(多消费者)。
  • 定义了一个与函数 channel 对应的函数 shared_channelshared_channel 返回一个 (Sender, SharedReceiver) 元组,而不是 (Sender, Receiver) 元组。 Sender 是在 std::sync::mpsc 中定义的结构体。
  • 还定义了一个与函数 sync_channel 对应的函数 shared_sync_channel
  • 尚未实现 std::sync::mpsc 的某些功能,例如 recv_timeout

示例

简单使用

let (tx, rx) = shared_channel();
for i in 0..10 {
    let rx = rx.clone();
    thread::spawn(move || println!("{}", rx.recv().unwrap()));
}

for i in 0..10 {
    tx.send(i).unwrap();
}

更多示例,请参阅 examples 目录。

无运行时依赖