【译文】Rust异步生态系统

ecosystem

原文:选自《Rust异步编程》第8章 异步生态系统

译者注:本译文已经合并进《Rust异步编程》中文翻译仓库huangjj27/async-book,号召大家也多多参与,期待与官方同步的中文完整版早日呈现。

Rust目前仅提供编写异步代码最基础的能力。重要的是,标准库尚未提供执行器,任务,反应器,组合器以及底层I/O futures和特质。同时,社区提供的异步生态系统填补了这些空白。

异步运行时

异步运行时是用于执行异步应用程序的库。运行时通常将一个反应器与一个或多个执行器捆绑在一起。反应器为外部事件提供订阅机制,例如异步I/O,进程间通信以及计时器。在异步运行时中,订阅用户通常是代表底层I/O操作的futures。执行器负责任务的计划和执行。它们跟踪正在运行和挂起的任务,轮询futures以完成任务,并在有进展时唤醒任务。 “执行器”一词经常与“运行时”互换使用。在这里,我们使用“生态系统”一词来描述一个绑定了兼容特质和功能的运行时。

社区提供的异步板条箱

Futures板条箱

futures板条箱包含可用于编写异步代码的特质和功能。这包括Stream,Sink,AsyncRead和AsyncWrite特质,以及诸如组合器的实用工具。这些实用工具和特质最终可能成为标准库的一部分。`

futures有它自己的执行器,但没有自己的反应器,所以它不支持异步I/O或计时器futures的执行。因为这个原因,它不被视为一个完整的运行时。一个常见的选择是将futures中的实用工具与另一个板条箱中的执行器一起使用。

主流的异步运行时

标准库中没有异步运行时,官方也没有建议这样做。下面列举的板条箱提供了主流的运行时。

  • Tokio:一个具有HTTP,gRPC和跟踪框架的主流异步生态系统。
  • async-std:一个提供标准库组件级别的板条箱。
  • smol:一个小且简单的异步运行时。提供可用于包装UnixStreamTcpListener此类的结构的Async特质。
  • fuchsia-async:在Fuchsia操作系统中使用的执行器。

确定生态系统兼容性

并非所有异步应用程序,框架和库都彼此兼容,也不是和每个操作系统或平台都兼容。大多数异步代码可以在任一生态系统中使用,但是某些框架和库会要求使用特定的生态系统。生态系统限制并不总是记录在案的,但是有一些经验法则可以确定一个库,特质或功能是否取依赖特定的生态系统。

与异步I/O,计时器,进程间通信或任务交互的异步代码通常都取依赖特定的异步执行器或反应器。除此以外的异步代码,例如异步表达式,组合器,同步类型和流,通常都与生态系统无关,所有嵌套的futures也与生态系统无关。在开始项目之前,建议先调研相关的异步框架和库,以确定与您选择的运行时以及彼此之间的兼容性。

值得注意的是,Tokio使用mio反应器并定义了自己的异步I/O特质的版本,包括AsyncReadAsyncWrite。 它本身与async-stdsmol不兼容,它们依赖于[async-executor 板条箱](https://docs.rs/async-executor)以及在futures中定义的AsyncRead和AsyncWrite特质。

有时可以通过兼容性层解决运行时冲突需求,它允许您在另一个运行时调用为当前运行时编写的代码。 例如,[async_compat库](https://docs.rs/async_compat)提供了 Tokio和其他运行时。

暴露异步API的库不应依赖于特定的执行器或反应器,除非它们需要生成任务、定义自己的异步I/O或者计时器futures。理想情况下,仅二进制程序应负责计划和运行任务。

单线程 vs 多线程执行器

异步执行器可以是单线程,也可以是多线程。例如,async-executor同时具有单线程LocalExecutor和多线程Executor。

多线程执行器可以同时完成多个任务。对于具有许多任务的工作负载,它可以大大加快执行速度,但是在任务之间同步数据的开销通常更大。在单线程和多线程运行时之间进行选择时,建议测量应用程序的性能。

任务可以在创建它们的线程上运行,也可以在单独的线程上运行。异步运行时通常提供将任务生成到单独线程上的功能。即使任务在单独的线程上执行,它们也应该是非阻塞的。为了在多线程执行器上计划任务,它们必须是Send。一些运行时提供了生成non-Send任务的功能,从而确保了每个任务都在生成它的线程上执行。它们还可以提供将阻塞任务生成到专用线程上的功能,这对于运行来自其他库的阻塞同步代码很有用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342