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

2024-06-23 01:18

本文主要是介绍【Rust日报】 2019-05-29:异步await语法最终确定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

#Python #ml

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

orkhon

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

#async #await

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

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

例如

在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

img

leg


From 日报小组 @Chaos

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel
  • 阿里云语雀订阅
  • Steemit
  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss
  • Rust Force: 支持rss
  • 微信公众号:Rust语言学习交流

这篇关于【Rust日报】 2019-05-29:异步await语法最终确定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085926

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹