Skip to content

Commit

Permalink
zxx的第四阶段总结
Browse files Browse the repository at this point in the history
  • Loading branch information
Zia6 committed Dec 22, 2024
1 parent 9dc053e commit 863e0a5
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"server": "hexo server"
},
"hexo": {
"version": "7.0.0"
"version": "4.2.1"
},
"dependencies": {
"hexo": "^4.2.1",
Expand All @@ -25,4 +25,4 @@
"hexo-renderer-stylus": "^1.1.0",
"hexo-server": "^1.0.0"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
title: 第四阶段总结,基于异步协程机制的OS
date: 2024-12-22 15:22:59
tags:
- author: Zia6
- repo: https://github.com/Zia6/AsyncRun
---


# 三周学习总结:Rust 异步编程与 io-uring 实现

在过去的三周里,我专注于学习 Rust 异步编程,深入了解了异步运行时的设计原理,并通过实现一个基于 io-uring 的简易运行时系统(AsyncRun)来实践这些知识。在此,我将总结我这三周的学习历程,涵盖了异步编程的基础、深入分析 Tokio 运行时的实现,以及基于 io-uring 的自定义运行时的设计与实现。

## 第一周:Rust 异步编程基础

在第一周,我主要集中于学习 Rust 异步编程的基础。通过阅读《Async/Await》教程和简单的例子,我深入了解了 Rust 异步模型的基本概念。这篇教程介绍了如何使用 `async``await` 关键字来简化异步编程,并有效避免回调地狱的问题。

### 学习内容:
- **Rust 异步编程概念:** 通过学习 `async``await`,我掌握了如何将异步操作与同步操作结合,避免阻塞主线程,提高程序的并发性。
- **Future 和 Stream 类型:** 在 Rust 中,`Future``Stream` 是处理异步操作的核心类型。理解它们的工作原理,对于编写高效的异步代码至关重要。
- **异步清理(Async Cleanup):** 我还阅读了一些关于 Rust 异步清理的博客,了解了如何在 Rust 的异步代码中进行资源的自动清理,防止内存泄漏。

## 第二周:深入学习 Tokio 运行时

在第二周,我深入研究了 **Tokio** 运行时。作为 Rust 中最流行的异步运行时,Tokio 被广泛应用于高并发、低延迟的系统中。我通过阅读《Tokio Internals》一文,学习了 Tokio 的总体设计思路,特别是在任务调度和执行方面的核心原理。

### 学习内容:
- **Tokio 运行时架构:** 我了解了 Tokio 是如何组织任务的,并深入研究了任务的生命周期管理。特别是如何在多线程环境下调度异步任务,以及调度器如何高效地管理线程池。
- **源码分析:** 我重点分析了 Tokio 的 `task``schedule` 部分的源码,通过阅读源码,我进一步理解了 Tokio 任务调度机制的实现原理。
- **博客总结:** 为了加深理解,我撰写了两篇博客,分别总结了:
- [Tokio Task 阅读总结](https://zia6.github.io/2024/12/10/Tokio-Task%E9%98%85%E8%AF%BB/)
- [多线程下的 Schedule 机制](https://zia6.github.io/2024/12/10/Tokio-Task%E9%98%85%E8%AF%BB/)

## 第三周:深入探索 io-uring 和实现自定义 Runtime

在第三周,我转向了更加高效的异步 I/O 机制 **io-uring**。io-uring 是 Linux 内核提供的一种高性能 I/O 机制,它通过零拷贝和直接从用户空间发起 I/O 操作,显著减少了 I/O 延迟。

### 学习内容:
- **io-uring 和传统 I/O 比较:** 我写了一篇博客,详细总结了 **io-uring****epoll****select** 三种 I/O 机制的区别、使用场景以及性能差异。通过实验数据,我展示了它们在高并发场景下的性能表现。
- [io-uring 学习总结](https://zia6.github.io/2024/12/22/io-uring%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/)
- **实现基于 io-uring 的运行时:** 作为这一周的实践,我实现了一个简易的基于 io-uring 的异步运行时,命名为 **AsyncRun**。该运行时通过 io-uring 提供的高效异步 I/O 操作,能够在处理大量并发任务时保持较低的延迟和较高的吞吐量。

### AsyncRun 运行时设计与实现

**AsyncRun** 是我为了解决高效 I/O 调度与任务执行问题,基于 io-uring 实现的异步运行时。它的设计目标是通过结合 io-uring 提供的零拷贝、高效任务调度机制,在高并发和低延迟场景下提高异步任务的执行效率。

#### 核心特点:
- **基于 io-uring 实现:** `AsyncRun` 使用 io-uring 处理 I/O 操作,减少了 I/O 请求的上下文切换,显著提升了 I/O 操作的性能。
- **异步任务调度:** 运行时设计了一个任务调度器,能够高效地将任务分配给可用的执行器,保证异步任务能够快速响应。
- **单线程支持:** 该运行时不支持多线程,所有的任务调度和执行都发生在单线程环境下,以避免并发带来的复杂性。
- **低延迟与高吞吐量:** 通过结合 io-uring 和高效的任务调度机制,`AsyncRun` 在高并发场景下提供低延迟和高吞吐量,适用于需要高效 I/O 的应用场景。

#### 运行时架构:
1. **任务调度器:** 任务调度器负责管理异步任务的生命周期,动态调整任务的执行优先级和分配策略。
2. **io-uring 管理:** 通过 io-uring 提交异步 I/O 请求,并在操作完成后通过回调函数处理结果。这样可以避免传统 I/O 中频繁的系统调用和上下文切换。
3. **执行器:** 执行器负责将任务分配给运行时环境中的单一线程,确保任务能够尽可能高效地执行。

你可以在我的 [GitHub 仓库](https://github.com/Zia6/AsyncRun) 查看完整的代码,并了解如何使用它。

## 收获与展望

通过这三周的学习与实践,我不仅加深了对 Rust 异步编程的理解,还学到了如何设计和实现一个高效的异步运行时系统。尤其是在深入分析 Tokio 运行时的实现后,我对如何在多线程环境下调度异步任务有了更清晰的认识。

未来,我计划继续深入研究异步运行时,特别是性能优化和扩展性方面的问题。通过实现基于 io-uring 的 Runtime,我已经掌握了如何在高并发环境下高效地管理异步任务。下一步,我将尝试将这些经验应用到更复杂的系统中,进一步提升其性能和可靠性。

0 comments on commit 863e0a5

Please sign in to comment.