【Rust日报】2023-09-12 Bevy 诞生三周年

【rust日报】2023-09-12 bevy 诞生三周年

【Rust日报】2023-09-12 Bevy 诞生三周年

使用 FuturesUnordered 处理多个 Future

在本文中,我们将探讨一个功能强大且高效的类型 futures::stream::FuturesUnordered,它能够同时处理多个异步任务,并以非阻塞的方式轮询多个任务,然后处理任务完成时获取的结果。

代码语言:javascript代码运行次数:0运行复制```javascript use futures::stream::FuturesUnordered; use futures::StreamExt; use std::pin::Pin; use std::future::Future;

[tokio::main]

async fn main() { // 创建一个 FuturesUnordered 结构体,所有的 Future 类型相同:Box>。 let mut tasks = FuturesUnordered::>>>::new(); // 使用 Box::pin 创建一个固定位置的、堆分配的 Future 版本。 // 这确保了 Future 一旦开始执行,其内存位置不会改变。 tasks.push(Box::pin(task_one())); tasks.push(Box::pin(task_two())); tasks.push(Box::pin(task_three())); while let Some(result) = tasks.next().await { println!("{}", result); } }

ReadMore: https://betterprogramming.pub/futuresunordered-an-efficient-way-to-manage-multiple-futures-in-rust-a24520abc3f6

QuickDiv 基于libpide 的快速除法和取模

QuickDiv 是一个Rust包,基于libpide C/C++库,允许您通过相同的除数加速重复的除法和取模运算。在大多数硬件上,整数除法操作的执行时间比乘法和加法等操作要长。因此,编译器通常通过将除以常数的操作替换为更快速的移位、乘法和加法序列来进行优化。本软件包允许您应用类似的算法来优化在运行时才能确定的值的除法操作。

代码语言:javascript代码运行次数:0运行复制```javascript use quickp::DivisorU64;

fn is_quadratic_residue(q: u64, modulus: u64) -> bool { // 初始化一个除数比单个未优化的除法更昂贵,要获得好处,您必须多次使用相同的除数进行除法。 let modulus = DivisorU64::new(modulus); // 通过使用 ::get() 可以恢复原始值。 for x in (0..modulus.get()) { // 除数可以作为 / 和 % 运算符的第二个操作数使用。 if (x * x) % modulus == q { return true; } } false }

assert!(is_quadratic_residue(152, 169)); assert!(!is_quadratic_residue(51, 111));

ReadMore: https://www.php.cn/link/bd8b018945a0b4de22406b60a8f8e369

关键词:rustgitaic++red

网友留言(0 条)

发表评论