当前位置:首页 > 数码 > 环球-Futures-Rust-探求-异步编程 (环球扶梯乘完需要约几分钟)

环球-Futures-Rust-探求-异步编程 (环球扶梯乘完需要约几分钟)

admin4个月前 (04-27)数码23

当天,咱们来讨论中的异步编程和Futures。Rust的异步编程是一个弱小的个性,它准许开发者编写非阻塞的、高性能的运行程序。让咱们一同深化了解这一律念及其在Rust中的运行。

异步编程

Rust中的异步编程

异步编程是一种让程序在等候一个长期间操作(如I/O)成功时能够继续口头其余义务的编程形式。在Rust中,异步编程是经过关键字和特质成功的。

1.关键字

2.特质

成功异步编程

要在Rust中运转异步代码,须要一个运转时(runtime),例如或。这些运转时提供了口头异步义务所需的基础设备。

示例代码:异步函数和.await

usetokio;//经常使用tokio作为运转时#[tokio::main]asyncfnmain(){letresult=hello_world().await;println!("{}",result);}asyncfnhello_world()->String{"Hello,world!".to_string()}
在这个例子中, hello_world 函数是一个异步函数,它立刻前往一个Future。当调用时,它会暂停以后义务,直到Future成功。

Futures和义务调度

失误处置

在Rust的异步代码中,失误处置理论经过类型启动。这与同步Rust代码中的失误处置相似。

示例:异步失误处置

asyncfnfetch_data()->Result<String,io::Error>{//假定的异步操作Ok("Data".to_string())}#[tokio::main]asyncfnmain(){matchfetch_data().await{Ok(data)=>println!("Received:{}",data),Err(e)=>eprintln!("Error:{}",e),}}

论断

Rust的异步编程和Futures为编写高性能且非阻塞的运行程序提供了弱小的工具。经过了解和运行这些概念,你可以构建高效的Rust运行程序,尤其是在处置少量I/O操作的场景中。记住,只管Rust的异步编程提供了很多长处,但它也带来了额外的复杂性,因此应当依据运行的需求和高低文谨慎选用经常使用。

Rust编程语言里的B树map

rust编程语言里的btreemap 和HashMap不同HashMap的数据顺序是不确定的 当你运行同一段 初始化HashMap的代码 然后打印输出元素的顺序是不同的btreemap的数据是按键排序好了的 它是基于B树创建出来的目前支持少量数据创建btreemap 它用线性查询 性能比较高它实现了ord特性 可以用来比较 取最大最小值 所以按照范围查询数据 效率也高rust里的btreemap提供了 和HashMap类似一致的方法可以像HashMap一样 new一个btreemap 然后insert一键值对还可以用from函数 从数组创建btreemap想要获取一个数据时 可以用get方法传入键 返回option包装的值可以用索引的方式 给btreemap传入一个键 会直接得到值 如果键不存在 会报错 所有这种方式取值需先判断和HashMap类似 可以用entry方法 存入键值对它也有一些HashMap没有的方法 pop_first可以删除第一个键值对 并返回option包装的这个数据 这个键是最小的last_key_value返回最后的 最大键的option包装的键值对 last_entry方法返回和上面方法一样 只不过是entry包装键值pop_last方法删除并返回 最后一个用option包装的元素append方法可以用来 合并两个btreemaprange方法可以用来 取一段键范围的数据

Rust编程语言里的future

在异步编程里 future代表一个异步计算 它的表示形式就是 在函数前面加上async标签那么通过await可以等待 运行时的任务去执行future future背后有poll方法 可以查询future结果 一开始还没输入参数 也就是没执行的时候 自然没有结果 返回的是pending状态 同时poll的上下文中的唤醒器 会被拷贝一份到poll里一旦future就绪 poll里的唤醒器 来唤醒wake方法就是 通知运行时这个future 可以执行了 来个任务来执行future吧 如果运行结束就返回结果 没有结束就返回pending状态 还可以继续poll查询状态 但是只有最近一次的poll的唤醒器 会被通知去执行可见调用future的时候 它是惰性的 它本身不会去执行 它依赖唤醒器的wake方法 去通知有进度了 poll就获取结果 这就避免了无限 循环的去查询future其它编程语言里的异步是怎么运行的你,你知道吗,欢迎交流

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Rust

“环球-Futures-Rust-探求-异步编程 (环球扶梯乘完需要约几分钟)” 的相关文章

深化浅出把握JSON处置-如何在Rust中操作JSON (剖析深入浅出)

深化浅出把握JSON处置-如何在Rust中操作JSON (剖析深入浅出)

sonic-rs​还具备一些额外的方法来启动惰性评价和提高速度。例如,假设咱们想要一个JSON​字符串文字,咱们可以在反序列化时经常使用LazyValue​类型将其转换为一个依然带有斜杠的JSON字符...

记一次性Rust内存走漏排查之旅 (记一次性游戏)

记一次性Rust内存走漏排查之旅 (记一次性游戏)

在某次继续压测环节中,咱们发现GreptimeDB的Frontend节点内存即使在恳求量颠簸的阶段也在继续下跌,直至被OOMkill。咱们判别Frontend应该是有内存走漏了,于是开启了排查内存...

获得代码重用性和类型安保性的长处-Rust-在-编程中经常使用泛型 (获得代码重用的方法)

获得代码重用性和类型安保性的长处-Rust-在-编程中经常使用泛型 (获得代码重用的方法)

本文的内容将触及泛型定义函数、结构体、枚举和方法,还将探讨泛型如何影响代码性能。 1.摘要 中的泛型可以让咱们为像函数签名或结构体这样的项创立定义,这样它们就可以用于多种不同的详细数据类型。...

Rust-踏上技术变革的征途-把握

Rust-踏上技术变革的征途-把握

起源|泡芙玩编程(ID:gh_23284b66d001) 前言 或者有点难学,但我还是倡导去学一学,最少要了解一下它的理念,它是如何做到它所吹的那些个性的,为什么别的言语做不到它做到了...

从零开局构建您的第一个运行-深化Rust编程 (从零开始开局)

从零开局构建您的第一个运行-深化Rust编程 (从零开始开局)

当天,咱们将一同入手通常,经过构建一个便捷的运行来深化了解这门言语。 咱们的名目是一个命令行文本文件剖析器,它不只能读取和显示文件内容,还会提供一些基础的文本剖析,如计算单词数量和行数。...

运行要求苛刻的软件或应用程序 (运行要求是什么)

运行要求苛刻的软件或应用程序 (运行要求是什么)

今天,我们将深入探讨 Rust 语言中的数据类型,这是理解和掌握 Rust 的基础。 Rust 语言数据类型概览 Rust 是一种静态类型语言,所有变量的类型在编译时确定。Rust 的...

Web-Benefits-Applications-Comprehensive-Development-A-to-Guide-in-Rust-and (web背景图片怎么设置)

Web-Benefits-Applications-Comprehensive-Development-A-to-Guide-in-Rust-and (web背景图片怎么设置)

Rust, initially designed for systems programming, has gained increasing attention in the realm of...