惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
Y
Y Combinator Blog
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
博客园 - 司徒正美
I
InfoQ
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
U
Unit 42

博客园 - liufu627

使用option 链式调用来代替异步方法幂调用 Rust 各种情况下如何修改变量 Rust 单链表的实现 Closure move 数值类型与引用类型的区别 rust 使用泛型来完成多态 Rust学习 红黑树新解(删除) 红黑树新解(插入) WCF快速創建 dropdownlist - liufu627 - 博客园 ArcGIS安装 泛型OraHelper - liufu627 - 博客园 让SendKeys支持空格键 - liufu627 - 博客园 标点符号的英文说法 Hashtable 让哈希表顺序输出。 PDA datagrid问题 日期格式化 - liufu627 - 博客园 JSON.net的使用 关于C#测试Oracle数据库链接的问题
# Rust异步网络编程
liufu627 · 2020-03-24 · via 博客园 - liufu627

Posted on 2020-03-24 22:29  liufu627  阅读(2103)  评论()    收藏  举报

# Rust异步网络编程

Rust的高性能异步网络编程模式目前是基于mio和futures这两个库构建的生态。

Tokio则连接这2个库构建了一个异步非阻塞事件驱动编程平台。

# 什么是 mio,futures,tokio

## 1- Mio

Mio是Rust的轻量级快速低级IO库,专注于非阻塞API,事件通知以及用于构建高性能IO应用程序的其他有用实用程序.

## 特征

快速 - 相当于OS设施级别的最小开销(epoll,kqueue等..)

非阻塞TCP,UDP。

由epoll,kqueue和IOCP支持的I/O事件通知队列。

运行时零分配

平台特定扩展。

平台支持

Linux

OS X

Windows

FreeBSD

NetBSD

Solaris

Android

iOS

Fuchsia (experimental)

## 2- futures

Rust中的零成本异步编程库,Futures可在没有标准库的情况下工作,例如在裸机环境中。

提供了许多用于编写异步代码的核心抽象:

> Future是由异步计算产生的单一最终值。一些编程语言(例如JavaScript)将此概念称为“promise”。

> Streams表示异步生成的一系列值。

> Sinks支持异步写入数据。

> Executors负责运行异步任务。

还包含异步I/O和跨任务通信的抽象。

所有这些是任务系统的基础,它是轻量级线程(协程)的一种形式。使用Future,Streams和Sinks构建大型异步计算,然后将其生成作为独立完成的任务运行,但不阻塞运行它们的线程。

## 3- Tokio

Tokio : Rust编程语言的异步运行时,提供异步事件驱动平台,构建快速,可靠和轻量级网络应用。利用Rust的所有权和并发模型确保线程安全

> 基于多线程,工作窃取的任务调度程序。

> 一个反应器操基于作系统的事件队列(epoll的,kqueue的,IOCP等)的支持。

> 异步TCP和UDP套接字。

这些组件提供构建异步应用程序所需的运行时组件。

## 快速

Tokio构建于Rust之上,提供极快的性能,使其成为高性能服务器应用程序的理想选择。

1. 零成本抽象

与完全手工编写的等效系统相比,Tokio的运行时模型不会增加任何开销。

使用Tokio构建的并发应用程序是开箱即用的。Tokio提供了针对异步网络工作负载调整的多线程,工作窃取任务调度程序。

2. 非阻塞I/O

Tokio由操作系统提供的非阻塞,事件I/O堆栈提供支持。

## 可靠

虽然Tokio无法阻止所有错误,但它的目的是最小化它们。Tokio在运送关键任务应用程序时带来了安心。

1. 所有权和类型系统

Tokio利用Rust的类型系统来提供难以滥用的API。

2.  Backpressure

Backpressure开箱即用,无需使用任何复杂的API。

3. 取消

Rust的所有权模型允许Tokio自动检测何时不再需要计算。Tokio将自动取消它而无需用户调用cancel函数。

## 轻量级

Tokio可以很好地扩展,而不会增加应用程序的开销,使其能够在资源受限的环境中茁壮成长。

1. 没有垃圾收集器

因为Tokio使用Rust,所以不包括垃圾收集器或其他语言运行时。

2. 模块化

Tokio是一个小组件的集合。用户可以选择最适合手头应用的部件,而无需支付未使用功能的成本。