我做计算机系统项目的第一次经历是使用vanilla Java构建服务器,然后在Android手机上构建客户端.从那时起,我发现有很多框架可以帮助管理可伸缩性,并消除编写样板代码的需要.

我试图了解TokioRayon等服务能够实现哪些功能.

我在Tokio tutorial page页上看到了这一段,我很难理解它

当您以异步方式编写应用程序时,可以通过降低同时做许多事情的成本,使应用程序能够更好地扩展.然而,异步Rust代码不能单独运行,所以必须 Select 一个运行时来执行它.

我最初认为"运行时"可能指的是二进制文件可以运行的地方,但看起来Tokio只提供了Rust标准库中已有的功能,而Rayon实现了标准库中没有的功能.

异步函数的标准实现是在标准库中写得很差,还是我不了解Tokio提供的服务?

推荐答案

Rust目前在标准库中不提供异步运行时.有关详细信息,请参见第Asynchronous Programming in Rust章,尤其是"异步生态系统"一章

Rust目前只提供编写异步代码的基本要素.重要的是,标准库中尚未提供执行器、任务、react 器、组合器以及低级I/Ofuture 和特性.与此同时,社区提供的异步生态系统填补了这些空白.

Rust有非常严格的向后兼容性要求,而且他们没有 Select 锁定特定的运行时.有理由 Select 一个而不是另一个(例如,特性与大小),将其作为标准库的一部分会带来某些 Select ,而这些 Select 显然不适合所有项目.随着社区项目更好地探索这一空间,并帮助确定最佳的 Select 组合,而无需强大的向后兼容性promise ,这一点在future 可能会发生变化.

Rust相关问答推荐

为什么我的梅森素数代码的指数越大,速度就越快?

trait声明中的生命周期参数

如何装箱生命周期相关联的两个对象?

用 rust 蚀中的future 展望 struct 的future

如何正确重新排列代码以绕过铁 rust 借入判断器?

无符号整数的Rust带符号差

Rust编译器似乎被结果类型与anyhow混淆

使用Rust WASM读取文件

如何返回 struct 体中向量的切片

`UnsafeCell` 在没有锁定的情况下跨线程共享 - 这可能会导致 UB,对吗?

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

中文优化标题:跳出特定循环并返回一个值

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

具有在宏扩展中指定的生命周期的枚举变体数据类型

如何使用泛型满足 tokio 异步任务中的生命周期界限

仅在运行测试时生成调试输出

有没有办法阻止 rust-analyzer 使非活动代码变暗?

Cargo:如何将整个目录或文件包含在功能标志中?

如何在不设置精度的情况下打印浮点数时保持尾随零?

在特征中返回一个 Self 类型的值