tokio 的理解

tokio 基本上是 rust 异步编程中是最重要的库.
它融合了线程和协程的概念, 对外提供了 task 的概念.

首先, 它会启动和管理一个线程池, worker threads, 线程的数目基本上与 CPU 的核数相对应.

其次, rust 的语法 async await, 是会创建实现 Future 的状态机, 即通俗说的创建 future . 不同的 Runtime 系统来处理这些 future

再次, tokio 是一种 Runtime 实现, tokio 会将这些 future 包装成 task, 放入到 tokio 内部的调度器序列.

然后, tokio 的 worker 线程会轮询这些 task.

那么有个问题: 这些 task 是协程吗?

基本上也是协程的范畴, 但不是传统的协程, 与 go 的基于栈的协程机制不同, 这个是基于状态机的.

  • 每个 task 没有独立的栈
  • 不会抢占, 也是合作式调度, 只有在一个 task 主动调用 await 的时候, 才会让出执行权.
  • 上面这一点, 就满足协程单词中的协的概念, 即协作/合作式调度.

或者说, async await 本身就是协程的概念, 而 tokio 只是一种具体的实现.

worker 的工作内容:

  • poll Tasks
  • 处理 IO 事件
  • 驱动异步执行
相关推荐
滕州市燕猫虎计算机科技工作室个体工商户7 小时前
《Rust程序设计》学习笔记六:错误处理
rust·学习笔记·rust程序设计·rust学习笔记
达子66610 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
对象存储与RustFS18 小时前
HelixDB 上手:Agent 记忆新方案,基于 RustFS 对象存储,附完整 docker-compose 部署示例
后端·rust·开源
Amos_Web18 小时前
Rspack 源码解析(二十):Typed Hook 系统如何靠宏生成
前端·rust·前端框架
Source.Liu19 小时前
【A11】拆分前端,实现多页面方案
前端·rust
Kapaseker20 小时前
别只会 unwrap():Rust Result 的几种实用写法
rust
DongQiShanRen1 天前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust
编程序的员1 天前
使用OpenTelemetry来监控Rust应用
运维·rust·monitoring·opentelemetry
对象存储与RustFS2 天前
JuiceFS + 对象存储:把 S3 变成 POSIX 文件系统实测
后端·rust·开源
遇码2 天前
侧边栏一开,AI 画的东西就被挡住了:给白板画布加「真实可见区」计算和相机补偿
人工智能·ai·rust