Skip to content

Commit

Permalink
async: Update index
Browse files Browse the repository at this point in the history
  • Loading branch information
XuShaohua committed Mar 14, 2024
1 parent 6e3245f commit 7f948de
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
3 changes: 1 addition & 2 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,12 @@
- [自定义内存分配器](mem/customize-allocator.md)
- [工具](mem/tools.md)
- [并发](concurrency/index.md)
- [并发编程模型](concurrency/concurrent-programming-model.md)
- [并发编程模型 concurrency models](concurrency/concurrent-programming-model.md)
- [共享内存 Shared memory](concurrency/shared-memory.md)
- [消息传递 message passing](concurrency/message-passing.md)
- [多进程编程](concurrency/multi-processing.md)
- [多线程与线程池](concurrency/multi-threads.md)
- [Channel](concurrency/channel.md)
- [Actor Model](concurrency/actor-model.md)
- [Send and Sync](concurrency/send-and-sync.md)
- [Arc 与 Weak](concurrency/arc.md)
- [Mutex 与 MutexGuard](concurrency/mutex.md)
Expand Down
14 changes: 14 additions & 0 deletions src/async/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# 异步编程 Asynchronous Programming

多线程并发模型, 会耗费很多的 CPU 和内存资源, 创建以及切换线程的成本也很高; 可以使用线程池来缓解部分问题.

async并发模式可以降低对CPU和内存资源的过度使用, 只需要很少的数个系统级线程就可以创建大量的任务(tasks,
或者称作用户级线程), 每个任务的成本都很便宜.
这些任务可以有数以万计甚至是百万级的.
然后, 因为要带有运行时(runtime), 以及存储大量的状态机, async程序的可执行文件会更大.

Rust 实现的异步式(async)并发编程模型, 有这些特点:

-`Future` 为中心, 当调用 `poll` 时执行程序, 当把 Future 丢弃时就终止程序
- 零开销 (zero-cost), 不需要分配堆内存, 或者使用动态分发 (dynamic dispatch), 这样的话在嵌入式等资源受限的环境里依然可以使用
- 标准库没有自带运行时 (runtime), 它们有社区提供, 目前使用量较多的有 tokio 和 async-std, 后面我们分别有所介绍
- 运行时可以有单线程的, 也可以是多线程的

## 参考

- [Rust async book](https://rust-lang.github.io/async-book/)
1 change: 0 additions & 1 deletion src/concurrency/actor-model.md

This file was deleted.

10 changes: 7 additions & 3 deletions src/concurrency/concurrent-programming-model.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 并发编程模型
# 并发编程模型 concurrency models

根据并发模块之间的通信方式的不同, 可以有两种分类:

Expand All @@ -8,9 +8,13 @@
根据并发模块运行方式的不同, 可以有三种分类:

- 多进程
- 系统级多线程, 线程由内核控制
- 用户级多线程, 由用户态的编写的 rust 运行时调度线程, 目前就是 async/await 异步编程
- 系统级多线程 (os threads), 线程由内核控制
- 事件驱动 (event-driven programming), 与回调 (callback) 相结合, 当事件发生时回调函数被触发
- Coroutines, 与多线程相同,不需要修改编程模型; 与 async 类似, 它们可以支持大量的任务
- actor model, 除了编程语言支持它之外, 例如比较出名的 erlang, 也有不少框架也有实现这种模型, 比如 rust 里的 actix 库
- async/await, 支持基于少数的系统级线程创建大量的任务 (tasks, 有时会被称为用户级线程), 而编写代码的过程与正常的顺序式编程基本一致

要注意的是, rust 并不排斥其它并发模型, 这些模型都有开源的 crate 实现.
接下来几节会对它们单独解释.

## 参考
Expand Down

0 comments on commit 7f948de

Please sign in to comment.