【Rust日报】 2019-05-29:异步await语法最终肯定

orkhon: 机器学习框架和运行时

#Python #ml网络

Orkhon是用于机器学习的Rust框架,用于运行/使用用Python编写的推理/预测代码,冻结模型和处理未知(unseen)数据。app

orkhon框架

「异步系列文章」Part 2: Async/Await语法以外的挑战 : 取消(Cancellation)

#async #await机器学习

在这篇文章里,做者讨论了若是在应用中取消正在进行的异步任务,这很是有用,主要是由于对它们的结果再也不有任何兴趣,因此继续操做就会成为资源占用。好比在超时范围内没有收到响应而且应该将错误发送回用户,则应该取消子操做。异步

先来看看在同步中如何取消任务:async

例如ide

在C#中,使用CancellationToken类型的变量传递给每一个方法,该方法是可取消工做流的一部分。这些方法能够不时地检查CancellationToken.IsCancellationRequested,以便发现父任务是否已请求取消。在这种状况下,子任务能够提早返回(例如经过抛出异常)。函数

其余语言是这种方法的变体:性能

Go使用Context结构将取消请求传播到子任务。在Go中,取消请求经过Channel发出信号,由于它能够轻松地使程序等待取消请求或来自其余来源的状态更新。学习

Java利用线程局部中断状态。若是一个线程得到.interrupted(),那么若是不处理异常,某些操做将抛出并强制返回子任务。这能够被视为某种线程局部的CancellationToken,它在方法之间没有明确地传递。它具备不能在异步上下文中使用的缺点。

这些行为具备一组特定的共性:

  • 取消始终只是经过取消请求来完成,它没法执行,即便请求已发出,子进程也可能运行一段时间。

  • 全部方法均可以观察是否发生了取消,若是子方法受到影响,而且可以对其作出反应

在async/await异步中如何取消:

Rust以外的语言,和同步取消任务的模式相似:

  • 经过专用参数或隐式任务本地参数请求取消

  • 须要方法来观察取消状态。

  • 即便取消后,异步方法也会完成。

好比,C# async Tasks经过CancellationToken发出取消信号。许多.NET core框架函数支持此参数以传播取消请求。Kotlin协程标准库识别取消请求并容许操做在取消时提早停止。Javascript没有取消的标准化类型,因为异步Javascript函数将始终运行完成,所以该机制还须要遵循上述所描述的模式。C++协程可使用cppcoro库中定义的CancellationToken。

Rust对Cancellation的支持与其余支持async/await的语言有所不一样。

  • 只需删除表示异步操做的Future便可触发取消

  • 不须要方法来转发取消请求或取消能力(例如,经过传递CancellationToken)

  • 取消是同步的 - 由于drop()是同步的

  • 取消不包括单独的取消请求并等待操做完成的步骤。只有一个取消/删除步骤。

  • 取消被强制执行 - 子方法不能忽视或推迟取消

这些特性有优势也有缺点:

  • 取消任务将变得简单

  • 主要缺点是底层操做必须支持同步取消,好比处理操做系统底层IO的时候,会比较麻烦。但该文章中也给出了一些解决办法。

更多内容请查看原文。

  • Read More

  • 文章列表


异步await语法最终肯定

#await

官方核心成员无船大佬在博客上披露,异步await语法的最终提议是继续推动后缀关键字语法: future.await。另外无船大佬还针对Rust语言设计给出了两点说明:

  1. Rust语言不多有绝对的状况出现。除了一些必需要作的事,好比类型系统必须健壮以外,其余绝大多数的问题都是权衡问题。也就是说,须要权衡不一样种类的方案,选择团队认为优先的道路。这样作必然会带来不少正面或负面的想法,因此咱们须要避免非黑即白的二分思想。

  2. 点关键字,只是一个方案的草图,并不带有某种角度的暗示或保证。它仍然须要走RFC流程。

  3. 引入@await语法,也是由于权衡成本的问题,由于引入新的符号会带来成本。

下一步:

准备在Rust 1.37稳定版中引入async/await的最小稳定化版本, 1.37将于8月中旬发布,并于7月4日发布。这不会是async/await功能的结束 - 最小功能将会有不少扩展 - 但对于每一个想要使用Rust进行高性能网络服务的人来讲,这将是一个重要的里程碑。

Read More


metrics: 高性能metrics库

#metrics

基于trait抽象,提供稳定API,支持Prometheus

metrics


Rust Audio论坛 - 讨论和询问有关Rust中音频开发的问题的地方

#audio

Read More


leg: 用于美化命令行输出的库

#cli

图片

leg

相关文章
相关标签/搜索