diff --git "a/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-XiangyuTu.md" "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-XiangyuTu.md" new file mode 100644 index 00000000000..fd04ae9727c --- /dev/null +++ "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-XiangyuTu.md" @@ -0,0 +1,28 @@ +--- + +title: 2024秋冬开源操作系统训练营第四阶段总结报告 +date: 2024-12-22 01:15:00 +tags: + - author:XiangyuTu + - repo:https://github.com/XiangyuTu/aruntime +--- + +作为常年开发网络程序的我,对异步、并发操作却仅仅停留在使用层面,这对我来说是一件长期的困扰。于是在第四阶段,我毫不犹豫地选择了“基于协程异步机制的OS”方向。在这个方向上,我学到了很多新的知识,也遇到了很多新的问题。 + +## 第一周 + +第一周的任务主要是了解 Rust 中异步的基本概念,通过阅读资料,我了解到了 Rust 中的 `async` 和 `await` 关键字背后的原理,并且了解到了如何实现有栈/无栈协程。过去我只了解过有栈协程,而无栈协程对我来说是一个全新的概念,其 LLVM Generator 的实现机制让我感到十分精妙。在这一周中,我主要是通过阅读资料和代码来了解这些概念,对于这些概念的理解还不是很深入。 + +## 第二周 + +第二周主要的工作是阅读 Tokio 代码,我阅读了 Tokio 的 `net`、`signal` 和 `sync` 模块,我将部分代码的分析记录在了共享文档中,这些代码的阅读让我对异步编程有了更深入的理解。 + +## 第三周 + +第三周通过阅读 `epoll`、`io-uring` 等相关资料,我了解到了异步 IO 的原理。通过阅读 `async-io` 和 `polling` 的代码,我了解了 `epoll` 在 Rust 异步运行时中的运用,而通过阅读 `monoio` 和 `tokio-uring` 的代码,我了解了 `io-uring` 在 Rust 异步运行时中的运用,这些代码的阅读让我对异步 IO 有了更深入的理解。`io-uring` 的机制起初让我感到困惑,但是在领悟到 `io-uring` 事实上是一个异步的系统调用框架而不是 `epoll` 这样的文件描述符复用机制后,我便茅塞顿开。 + +在阅读了大量相关的资料后,我也着手开始实现一个简单的异步运行时,通过对 [`mini-rust-runtime`](https://github.com/ihciah/mini-rust-runtime) 的学习和修改,我将其中使用 `polling` 实现的基于 `epoll` 的异步运行时改为了基于 `io-uring` 的异步运行时,并初步支持了文件的异步读写和 TCP 连接。因为使用 `io-uring` 必须从系统调用层面进行编程,抽象层次很低,在查阅了大量资料后我才勉强完成了这个十分粗糙的实现。 + +## 总结 + +毫不夸张的说,这短短的三周我学到了近年来对我来说最有价值的知识,使我对异步编程的理解有了质的飞跃,使我未来能更好地开发出高性能的网络程序。在学习的过程中,我也遇到了很多问题,但是通过查阅资料和请教老师,我都得到了解决。这次训练营对我来说是一次非常有意义的经历,我也希望未来能有机会继续参加这样的活动。 \ No newline at end of file