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 在 并发
每月 145次下载
在 7 个 Crates中使用 (直接使用2个)
11KB
109 行
mpsc_requests
更多信息,请参阅 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