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

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

admin7个月前 (04-27)数码28

当天,咱们来讨论中的异步编程和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-探求-异步编程 (环球扶梯乘完需要约几分钟)” 的相关文章

探索其优势-JavaScript开发者转向Rust的原因 (有效的探索)

探索其优势-JavaScript开发者转向Rust的原因 (有效的探索)

When it comes to web development, there are a plethora of programminglanguages to choose from. Two...

深化解析Clap命令行解析库-Rust脚手架 (深入解析)

深化解析Clap命令行解析库-Rust脚手架 (深入解析)

有感而发 最近,在和前端小同伴聊天发现,在2024年,她们都有计划入局学习的行列。毕竟前端如今太卷了,框架算是走到「走投无路」了,无非就是在原有基础上修修补补。一切他们想在新的赛道弯道超车。...

深化摸索Rust中经常使用Serde的片面指南 (深化探讨)

深化摸索Rust中经常使用Serde的片面指南 (深化探讨)

在处置HTTP恳求时,咱们总是须要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格局(例如JSON)之间来回转换。 Serde是一个库(crate),用于高...

在前端名目中经常使用Rust-编译为-WebAssembly (前端name)

在前端名目中经常使用Rust-编译为-WebAssembly (前端name)

前言 最近,不是放大了对关系文章的输入吗,在评论区或许私信区。有一些不同的声响说:Rust没有出路,而后...."。其实呢,看一个技术能否有须要学习的能源。想必大家的底层理由都是「一切都是向...

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

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

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

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

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

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

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

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

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

Rust-摸索两种言语在文件处置方面的绝对长处-Go-文件上行性能比拟-vs (rust摸领地柜还会被炮台打吗)

Rust-摸索两种言语在文件处置方面的绝对长处-Go-文件上行性能比拟-vs (rust摸领地柜还会被炮台打吗)

一、设置 一切测试都在装备16G内存的BookProM1上口头。 软件版本为: 测试工具是一个基于libcurl并经常使用规范线程的自定义工具,能够发送多局部恳求。 资产目...