6个版本

0.3.4 2024年7月7日
0.3.3 2020年9月12日
0.3.2 2020年5月17日
0.3.1 2019年12月27日
0.1.0 2018年11月3日

#265并发

Download history 159/week @ 2024-05-04 229/week @ 2024-05-11 79/week @ 2024-05-18 55/week @ 2024-05-25 79/week @ 2024-06-01 109/week @ 2024-06-08 62/week @ 2024-06-15 60/week @ 2024-06-22 35/week @ 2024-06-29 291/week @ 2024-07-06 116/week @ 2024-07-13 40/week @ 2024-07-20 42/week @ 2024-07-27 37/week @ 2024-08-03 33/week @ 2024-08-10 30/week @ 2024-08-17

每月 145次下载
7 Crates中使用 (直接使用2个)

MPL-2.0 许可

11KB
109

mpsc_requests

docs.rs badge

更多信息,请参阅 docs.rs.


lib.rs:

mpsc_requests针对crossbeam重写,由@stjepang编写 (https://github.com/crossbeam-rs/crossbeam/issues/353#issuecomment-484013974)

crossbeam_requests是一个小型库,基于crossbeam-channel构建,但增加了消费者向生产者响应消息的功能。由于生产者不再只是生产,消费者不再只是消费,因此将生产者重命名为[RequestSender],将消费者重命名为[RequestReceiver]。

此库基于crossbeam-requests而不是标准库中的mpsc通道,因为crossbeam具有更好的性能和与Android更好的兼容性。

此库的一个完美用例是单线程数据库,需要从多个线程访问(如SQLite)

以下是数据流图

|--------------------------------------------------------------------------------------| | 线程 | 请求线程 | 响应线程 | 请求线程 | |--------------------------------------------------------------------------------------| | 结构 | RequestSender -> RequestReceiver -> ResponseSender -> ResponseReceiver | | (方法) | (请求) -> (轮询,轮询循环) -> (响应) -> (收集) | |--------------------------------------------------------------------------------------|

示例

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

更多示例,请参阅测试目录中的测试

简单的回声示例

use std::thread;
use mpsc_requests::channel;

type RequestType = String;
type ResponseType = String;
let (requester, responder) = channel::<RequestType, ResponseType>();
thread::spawn(move || {
    responder.poll_loop(|req, res_sender| {
        res_sender.respond(req);
    });
});
let msg = String::from("Hello");
let receiver = requester.request(msg.clone()).unwrap();
let res = receiver.collect().unwrap();
assert_eq!(res, msg);

依赖关系

~345KB