2 个版本
0.1.1 | 2021 年 9 月 29 日 |
---|---|
0.1.0 | 2021 年 9 月 29 日 |
#1124 in 并发
用于 linux-rtic
12KB
180 行
futex-queue
基于 Linux futex 的具有定时器功能的高效 MPSC 队列。适用于实时应用。
工作原理
队列基于 Linux futex 系统调用来在单个系统调用中等待立即和计划中的项。这减轻了对单独定时器线程的需求,这将涉及多次上下文切换。
立即项通过常规 futex 原子变量唤醒机制发送。计划中的项使用 FUTEX_WAIT_BITSET
操作,以队列中最早项的绝对时间戳作为系统调用的超时。
示例
let (tx, mut rx) = FutexQueue::<u32, 4>::new();
let now = Instant::now();
let thread = thread::spawn(move || {
loop {
let item = rx.recv();
println!("{} ms: Received: {}", now.elapsed().as_millis(), item.value());
}
});
tx.send(1).unwrap();
tx.send_scheduled(2, now + Duration::from_secs(1)).unwrap();
tx.send(3).unwrap();
tx.send_scheduled(4, now + Duration::from_secs(2)).unwrap();
thread.join().unwrap();
输出
0 ms: Received: 3
0 ms: Received: 1
1000 ms: Received: 2
2000 ms: Received: 4
依赖项
~715KB
~14K SLoC